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)
.
我正在阅读格式如下的文本文件:
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)
.