fscanf没有扫描文件

dar*_*sky 1 c file-io scanf

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

char buf[20];
fscanf(fp, "%s", buf);
Run Code Online (Sandbox Code Playgroud)

该文件fp目前包含:1 + 23.

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

char *p;
p = buf;
Run Code Online (Sandbox Code Playgroud)

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

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

Fil*_*efp 7

fscanf(和相关的函数)格式字符串 " %s "会尝试读取尽可能多的字符,而不包括空格,在这种情况下,它会找到第一个字符(1)并存储它,然后它会命中一个空格() and therefore stop searching.


If you'd like to read the whole line at once consider using fgets,因为您需要将目标缓冲区的大小指定为其中一个参数,因此使用起来也更安全.

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

fgets (buf, 20, fp);
Run Code Online (Sandbox Code Playgroud)

文档链接