fgets 总是在文件的第一行读取 3 个垃圾字符

fgets always reads 3 junk chars at the first line of a file

我正在阅读格式如下的文本文件:

DUMMY,0000000000000100100000000000000000
JOHNDOE,0000000000000010000000100000000100
FOO,0000000000000000000000000100000000
BAR,1000000100000000000000000000000000

像这样使用 fgets 时:

while (fgets(line, linelength, stream) != NULL) { 
...
}

它总是在第一行出现三个垃圾字符。我尝试用纯文本编辑器删除第一行,只是为了测试文本之前没有不可打印的字符,但没有结果。它们总是相同的三个字符。 fgets 读取的第一行在 Visual Studio 调试控制台中如下所示:

DUMMY,0000000000000100100000000000000000

在终端使用printf显示时,是这样的:

DUMMY,0000000000000100100000000000000000

如上所述,如果我删除输入文件的第一行,那么下一行也有相同的字符:

JOHNDOE,0000000000000010000000100000000100

有趣的是,如果我将一个空行作为输入文件中的第一行,一切似乎都可以。

Byte order mark @Some programmer dude

DUMMY,0000000000000100100000000000000000
^^^

将文本文件保存为原始 ASCII 文件,而不是 editing/saving 文件 UTF-8

其他可能性涉及使用特定的实现 fopen() - 但一些 OP 代码将有助于探索它。

另见
如何在 C 中 Read/Write UTF8 文本文件? ,
C how to skip BOM when checking if x is at the start of a file,
是否可以防止将BOM添加到输出的UTF-8文件中? (Visual Studio 2005) .