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
,但将其定义为负值。