C程序打印奇怪的字符

时间:2014-11-24 10:39:45

标签: c arrays printing char

我有一个程序可以读取文件的内容并将其保存到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 个答案:

答案 0 :(得分:1)

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

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

  3. 如果strncpy()等于提供的缓冲区的大小,

    n添加终止空本身,从而变得非常不可靠(与{{1不同) }})。你需要以编程方式处理它。

    在此处查看strncpy() and strcpy()的手册页。