我想从文本文件中读取80个字符,将它们保存为字符串,然后打印该字符串进行验证。 我正在使用fread并拥有此代码:
char message[80];
size_t nread = fread(message, 1, sizeof(message), fp);
printf("Message received: \"__%s__\"\n", message);
输出是:
收到的消息:“__我很想改变这个世界,但他们不会 __“
当整个短语不在文件中时
和
__我很乐意改变世界,但他们不会给我源代码
@__
当整个短语在文件中时。
我尝试删除它并重写文本,但我再次得到相同的输出。
有什么问题?什么与charset?
答案 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);