获得'�'或者' @'从fread阅读文本文件时的符号

时间:2012-12-12 10:38:34

标签: c file io fread

我想从文本文件中读取80个字符,将它们保存为字符串,然后打印该字符串进行验证。 我正在使用fread并拥有此代码:

char message[80];
size_t nread = fread(message, 1, sizeof(message), fp);
printf("Message received: \"__%s__\"\n", message);

输出是:

  

收到的消息:“__我很想改变这个世界,但他们不会   __“

当整个短语不在文件中时

  

__我很乐意改变世界,但他们不会给我源代码
   @__

当整个短语在文件中时。

我尝试删除它并重写文本,但我再次得到相同的输出。

有什么问题?什么与charset?

1 个答案:

答案 0 :(得分:6)

fread()不终止缓冲区,prinf("%s")期望缓冲区为空终止。由于缓冲区不是null,因此printf()将继续读取,直到找到空终止符,并在此过程中打印出任何垃圾。

null null终止缓冲区,记住留空空终止符:

char message[81]; /* Increased by 1 for null terminator. */
size_t nread = fread(message, 1, sizeof(message) - 1, fp);
message[nread] = 0;
printf("Message received: \"__%s__\"\n", message);

或指示printf()仅打印使用"%.*s"格式说明符读取的字符数:

printf("Message received: \"__%.*s__\"\n", nread, message);