1

から奇妙なファイル ハンドルを取得していますfopen。ポインター自体は NULL ではありませんが、それが表すファイルにはサイズがなく、feof(file)既に設定されています...何が原因でしょうか?

(ファイル自体をトリプルチェックしました。存在し、データがあり、ファイルの権限は問題ありません...そしてfilename「source/test_file.object.txt」に設定されています)

bool tagFile(const char * filename){
    FILE * file = fopen(filename, "r");
    if(file == NULL){                        // file is not NULL
        printf("   Couldn't open the file %s", filename);
        return false;
    }
    int size = fseek(file, 0, SEEK_END); // size is 0
    rewind(file);
    while(feof(file)){

        ....  // never executes because feof(file) fails
    }
}
0x002cc410  // value of 'file' in the debugger
    _ptr=0x00000000 <Bad Ptr> 
    _cnt=0 
    _base=0x00000000 <Bad Ptr>
    _flag = 1
    _file = 3
4

1 に答える 1

0

これの最も一般的な原因は、単に空のファイルを開くことです。読み取るバイトがないため、EOF は即時ですが、ファイルが存在するためfopenNULL を返すことはできません。

于 2015-12-23T15:43:32.747 に答える