鉴于与path
相同的FILE *fopen(const char *path, const char *mode)
参数,fopen()
是否保证返回相同的FILE*
值?
,例如,以下代码的输出是否保证始终是相同值的两个指针?
#include <iostream>
#include <cstdio>
int foo( FILE* fp )
{
std::cout << fp << std::endl;
fclose(fp);
fp = fopen( "foo.txt", "w+" );
std::cout << fp << std::endl;
}
int main( int argc, char* arv[] )
{
FILE* fp = fopen( "foo.txt", "a" );
fwrite( "hello", 5, 1, fp );
foo( fp );
fwrite( "goodbye", 7, 1, fp );
fclose(fp);
return 0;
}
即。我想知道foo()
对其本地fp
的操纵是否使main()
失效。但是这个编译的代码总是输出相同的FILE*
值两次,暗示main()
仍然有效,即使foo()
正在处理本地副本而不是引用。
对于某些情况,这是我正在追逐工作的错误的简化:相当于上面的第二个fwrite()
有时会返回0
,而我正试图找出原因。看起来fwrite()
的错误报告仅限于ferror()
和feof()
,但上面编译的示例代码总是输出相同的指针值两次,这意味着代码没问题,并且我不清楚为什么会遇到ferror()
或feof()
条件。