C程序打印奇怪的字符

我有一个程序,它读取文件的内容并将其保存到buf 。 在阅读内容后,它应该将两个字符复制到一个数组。 如果我没有尝试从文件中读取,但是如果我尝试从文件中读取它,则缓冲区中的printf打印出我想要的两个字符,但添加了奇怪的字符,这段代码工作正常。 我已经确认并正确保存到buf中,没有奇怪的字符。 我无法弄清楚出了什么问题……这是代码:

 char *buffer = (char*)malloc(2*sizeof(char)); char *dst = buffer; char *src = buf; char *end = buf + strlen(buf); char *baby = '\0'; while (src<= end) { strncpy(dst, src, 2); src+= 2; printf("%s\n", buffer); } 

  1. (char*)malloc(2*sizeof(char)); 更改为malloc(3*sizeof*buffer); 您需要一个额外的字节来存储终止空字符,该字符用于指示end-of-string 。 Aslo,不要强制转换malloc()的返回值。 感谢放松

  2. 在你的情况下,使用strncpy() ,你提供了n2 ,它没有任何存储终止空字节的作用域。 如果没有trminating null, printf()将不知道在哪里停止。 现在,使用3个字节的内存,您可以使用strcpy()正确复制字符串

如果n等于提供的缓冲区的大小, strncpy()不会添加终止null本身,因此变得非常非常不可靠(与strcpy()不同)。 您需要以编程方式处理它。

在这里查看strncpy()strcpy()的手册页。