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); }
-
(char*)malloc(2*sizeof(char));
更改为malloc(3*sizeof*buffer);
您需要一个额外的字节来存储终止空字符,该字符用于指示end-of-string
。 Aslo,不要强制转换malloc()
的返回值。 感谢放松 -
在你的情况下,使用
strncpy()
,你提供了n
为2
,它没有任何存储终止空字节的作用域。 如果没有trminating null,printf()
将不知道在哪里停止。 现在,使用3个字节的内存,您可以使用strcpy()
正确复制字符串
如果n
等于提供的缓冲区的大小, strncpy()
将不会添加终止null本身,因此变得非常非常不可靠(与strcpy()
不同)。 您需要以编程方式处理它。
在这里查看strncpy()
和strcpy()
的手册页。