读取文件:fscanf 不读取空格?

Read File: fscanf doesn't read whitespaces?

我在使用 fscanf 从文件指针中获取行时遇到问题。

假设要获取这样的一行:

<123324><sport><DESCfddR><spor ds>

Fscanf 只获取这部分:

<123324><sport><DESCfddR><spor

有人知道如何解决这个问题吗?

提前致谢。

总之,读取包含空格的行的最佳方法是使用 fgets:

fgets (currentLine, MAX_LENGTH , filePointer);

使用 fscanf 你会遇到很多问题。

您可能正在 fscanf 中使用 %s 来读取数据。从 C11 标准,

7.21.6.2 The fscanf function

[...]

  1. The conversion specifiers and their meanings are:
    [...]
    s Matches a sequence of non-white-space characters. 286
    [...]

因此,%s 将在遇到白色space 字符时停止扫描,或者,如果长度字段存在,直到指定的长度或直到白色space 字符,以先到者为准。

如何解决这个问题?使用不同的格式说明符:

fscanf(fp ," %[^\n]", buffer);

上面的fscanf跳过所有白色space字符,如果有的话,直到第一个非白色space字符(space开始),然后, %[^\n] 扫描所有内容,直到出现 \n 个字符。

您可以使用

进一步提高安全性
fscanf(fp ," %M[^\n]", buffer);

M替换为buffer减一的大小(为NUL终止符保留一个space)。它是长度修饰符。另外检查 fscanf 的 return 值是个好主意。

不过使用 fgets() 是更好的方法。