C程序打印奇怪的字符

标签 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. (char*)malloc(2*sizeof(char)); 更改为 malloc(3*sizeof*buffer); 您需要一个额外的字节存储用于指示字符串结尾的终止空字符。另外,不要强制转换 malloc() 的返回值。 感谢放松

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

strncpy()不会添加终止 null 本身,以防 n 等于提供的缓冲区的大小,从而成为非常非常不可靠(与strcpy()不同)。您需要以编程方式处理它。

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

关于C程序打印奇怪的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27102830/

相关文章:

javascript - 使用 javascript 从浏览器打印 XML 或 TXT 文件

c - 如何用C实现无限极限梯形积分?

php - 从数组范围搜索值

java - 数组的设置方法

asp.net - 如何在没有页眉和页脚的情况下在 Asp.Net 中打印网页 - ASP.NET

无法打印可能在 C 中使用 typedef 构造的 MyType 中的值

c - 确保预处理器定义不会更改值

c - 使用 qsort、bsearch 帮助处理 C 中的指针

c - C 中的位移位返回错误结果

cmd.exe(批处理)脚本中的数组、链表等数据结构