我有一个程序可以读取文件的内容并将其保存到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);
}
答案 0 :(得分:1)
(char*)malloc(2*sizeof(char));
更改为malloc(3*sizeof*buffer);
您需要一个额外的字节来存储终止空字符,用于表示end-of-string
。同上,不要转换malloc()
的返回值。 感谢放松
在您的情况下,使用strncpy()
,您提供了n
作为2
,它没有任何存储终止空字节的作用域。如果没有trminating null,printf()
将无法知道停止的位置。现在,使用3个字节的内存,您可以使用strcpy()
正确复制字符串
strncpy()
等于提供的缓冲区的大小, n
将不添加终止空本身,从而变得非常不可靠(与{{1不同) }})。你需要以编程方式处理它。
在此处查看strncpy()
and strcpy()
的手册页。