在这个相关问题How to use feof and ferror for fgets (minishell in C)中,对于我的问题,答案并不确定。
我想做的是:我想从磁盘上的纯文本文件中读取所有字符。它不是链接,设备文件,套接字等,只是普通的文本文件。阅读完所有字符后,我想查看是否一切成功。我现在看到的是,在Debug构建中,一切都成功进行,但是在Release构建中,ferror()
始终指示存在错误。调试版本最后返回0。在这两种情况下,我都可以看到文件的内容是在调试器中获取的。
my_function(File* f) {
int c;
while ((c = fgetc(f)) != EOF) {
char character = (char) c;
// store character in a dynamic growing buffer
}
// append '0' byte to buffer (to terminate the string).
if (ferror(f)) {
// return error
return 1;
}
return 0; // no error.
}
拥有一个已经打开的文件作为函数参数的理由是,它使得从文件中读取相对容易,而无需理会依赖于平台的编码。这是在我的库的私有部分内,公共函数处理f == NULL
的情况。
我是否需要首先调用clearerr(file)
,因为在发布版本中未初始化错误位?