嗨,如果我有一个包含以下文本的文件(text.txt):
This is a file.
并且在我的主要方法中,我这样调用fscanf:
fscanf(fp, "%s", buffer)
然后做
printf("%s", buffer);
其中fp
是文件指针,缓冲区是大小为100的char数组,用于存储我从文件中读取的内容,
我得到输出:
This
我了解原因-这是因为%s
将文件扫描到第一个空白。
然后我打电话给
fscanf(fp, " is a %s.", buffer)
和做
printf("%s", buffer)
我得到输出
file.
[我想知道为什么会这样,因为我认为%s
只会得到文件中fp
指向的下一个字符串,所以不应该。is
并不是file.
fscanf第一次解析来自文件的格式化数据:
fscanf(fp, "%s", buffer)
您告诉程序读取第一个单词直到第一个空格,在您的示例中为This
。
现在指针在This| is a file.
处,因此在您调用时:
fscanf(fp, " is a %s.", buffer)
您正在告诉程序将buffer
所在位置的字符串存储到%s
中,这意味着您正在读取file.
,因为您是在“丢弃” " is a "
]
要阅读is
,您可以做:
fscanf(fp, " %s", buffer) // note the space before %s
在您第一次阅读fscanf()
的This
通话之后