1

我正在尝试使用扫描文件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这里做错了什么?为什么不从文件中读取整个字符串?

4

1 回答 1

7

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


如果您想一次阅读整行,请考虑使用fgets,它也更安全,因为您需要将目标缓冲区的大小指定为它的参数之一。

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

fgets (buf, 20, fp);

文档链接

于 2012-07-15T14:35:10.210 回答