1

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

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

输出是:

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

当整个短语不在文件中时

和:

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

当整个短语在文件中时。

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

怎么了?字符集的东西?

4

1 回答 1

6

fread()不为空终止缓冲区并prinf("%s")期望缓冲区为空终止。由于缓冲区不是空终止的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);
于 2012-12-12T10:39:44.107 回答