我想从文本文件中读取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?
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)
| 归档时间: |
|
| 查看次数: |
228 次 |
| 最近记录: |