从fread读取文本文件时获取' '或'@'符号

Chr*_*ris 1 c io file fread

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

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

输出是:

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

当整个短语不在文件中时

和:

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

当整个短语在文件中时.

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

怎么了?什么与charset?

hmj*_*mjd 6

fread()不为null终止缓冲区并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);
Run Code Online (Sandbox Code Playgroud)

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

printf("Message received: \"__%.*s__\"\n", nread, message);
Run Code Online (Sandbox Code Playgroud)