fscanf没有扫描文件

时间:2012-07-15 14:33:21

标签: c file-io scanf

我正在尝试使用fscanf扫描文件,并将字符串放入大小为20的char数组中,如下所示:

char buf[20];
fscanf(fp, "%s", buf);

文件fp目前包含:1 + 23

我正在设置指向buf中第一个元素的指针,如下所示:

char *p;
p = buf;

打印bufprintf("%s", buf)仅产生1。试图增加p并打印出垃圾(p++; printf("%c", *p))。

我在fscanf做错了什么?为什么不从文件中读取整个字符串?

1 个答案:

答案 0 :(得分:7)

带有 format-string %s ”的

fscanf(和相关函数)会尝试尽可能多地读取字符而不包含空格,在这种情况下,它将找到第一个字符(1)并存储它,然后它将命中一个空格(),因此停止搜索。


如果您想立即阅读整行,请考虑使用fgets,因为您需要将目标缓冲区的大小指定为其中一个参数,因此使用起来也更安全。

fgets将尝试读取最大缓冲区长度减去1 个字符(为尾随空字节保存最后一个字节),它将停止阅读那么多字符,点击换行或文件末尾。

fgets (buf, 20, fp);

文档链接