【问题标题】:fgets always reads 3 junk chars at the first line of a filefgets 总是在文件的第一行读取 3 个垃圾字符
【发布时间】:2020-09-05 15:45:53
【问题描述】:

我正在阅读具有这种格式的文本文件:

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

当像这样使用 fget 时:

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

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

DUMMY,0000000000000100100000000000000000

使用 printf 在终端显示时,如下所示:

DUMMY,0000000000000100100000000000000000

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

JOHNDOE,0000000000000010000000100000000100

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

【问题讨论】:

标签: c file input ascii fgets


【解决方案1】:

Byte order mark @Some programmer dude

DUMMY,0000000000000100100000000000000000
^^^

不要将文件编辑/保存为UTF-8,而是将文本文件保存为原始 ASCII 文件。

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

另请参阅
How to Read/Write UTF8 text files in C? ,
C how to skip BOM when checking if x is at the start of a file,
Is it possible to prevent adding BOM to output UTF-8 file? (Visual Studio 2005)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-15
    • 1970-01-01
    • 2015-12-01
    • 1970-01-01
    • 2015-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多