我正在尝试使用fscanf
扫描文件,并将字符串放入大小为20的char数组中,如下所示:
char buf[20];
fscanf(fp, "%s", buf);
文件fp
目前包含:1 + 23
。
我正在设置指向buf
中第一个元素的指针,如下所示:
char *p;
p = buf;
打印buf
,printf("%s", buf)
仅产生1
。试图增加p
并打印出垃圾(p++; printf("%c", *p)
)。
我在fscanf
做错了什么?为什么不从文件中读取整个字符串?
答案 0 :(得分:7)
fscanf
(和相关函数)会尝试尽可能多地读取字符而不包含空格,在这种情况下,它将找到第一个字符(1
)并存储它,然后它将命中一个空格(),因此停止搜索。
如果您想立即阅读整行,请考虑使用fgets
,因为您需要将目标缓冲区的大小指定为其中一个参数,因此使用起来也更安全。
fgets
将尝试读取最大缓冲区长度减去1 个字符(为尾随空字节保存最后一个字节),它将停止阅读那么多字符,点击换行或文件末尾。
fgets (buf, 20, fp);
文档链接