C 如何检测文件中的子字符?

C 如何检测文件中的子字符?,c,string,C,String,我最近发现,使用fgetc()、fscanf()(C中用于扫描字符的常用函数)读取子字符()会使两者都将其解释为错误并返回EOF。我想知道是否有任何方法可以检测子字符,以便区分文件的“真实”结尾和明显的结尾 注意:我目前得出的结论是,在扫描过程中使用错误检测文件结尾,因为子字符用于表示错误,所以任务看起来不可能完成。但由于记事本似乎读得正确,我预计会有一些我不熟悉的使用C语言的技术。以二进制模式打开文件 ...fopen("filename", "rb")... 不要忘记库代码不再以二进制模式

我最近发现,使用
fgetc()、fscanf()
(C中用于扫描字符的常用函数)读取子字符()会使两者都将其解释为错误并返回EOF。我想知道是否有任何方法可以检测子字符,以便区分文件的“真实”结尾和明显的结尾

注意:我目前得出的结论是,在扫描过程中使用错误检测文件结尾,因为子字符用于表示错误,所以任务看起来不可能完成。但由于记事本似乎读得正确,我预计会有一些我不熟悉的使用C语言的技术。

以二进制模式打开文件

...fopen("filename", "rb")...

不要忘记库代码不再以二进制模式翻译“换行符”。如果文件的结尾行有
“\r\n”
对,则读取文件时将同时获得
'\r'
'\n'

1)确保将
fgetc()
的结果保存为
int
。2) SUB又名Ctrl^Z,被一些文本文件用于指示文件中最后一个
字符。许多文本文件不使用该选项,而是没有更多的数据可读取。3) 真正的文件结束是当
fgetc()
fscanf()
返回
int
、而不是
char
、EOF.@chux(第3点)fgetc()和fscanf()是返回int的原型时设置的文件结束条件。那么它们是如何返回char的呢?。据我所知,一个错误和文件的实际结尾都使两个函数返回-1。两个函数都返回
int
。将结果保存在
int
中非常重要。你可以找到很多这样弱的编码示例,比如
charch=fgetc(stdin);如果(ch==EOF).
。这两个函数在文件的错误/实际结尾返回
EOF
,不一定是
-1
。C规范没有将
EOF
定义为
-1
,但将其定义为负值。