我有一个程序可以读取文件的内容并将其保存到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);
您需要一个额外的字节存储用于指示字符串结尾
的终止空字符。另外,不要强制转换malloc()
的返回值。 感谢放松在您的情况下,使用
strncpy()
,您已将n
提供为2
,它没有任何范围存储终止空字节。如果没有终止 null,printf()
将不知道在哪里停止。现在,有了 3 个字节的内存,您就可以使用strcpy()
正确复制字符串
strncpy()
将不会添加终止 null 本身,以防 n
等于提供的缓冲区的大小,从而成为非常非常不可靠(与strcpy()
不同)。您需要以编程方式处理它。
查看手册页 strncpy()
and strcpy()
在这里。
关于C程序打印奇怪的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27102830/