0

次のコードで segfault が発生しましたが、その理由がわかりません。これは、最後に 0 を返す以外のメイン関数の唯一のコードです。また、「fr open」も正常に出力されます。

//create file pointer and open file
FILE *fr;
fr = fopen("IntegerArray.txt", "r");

if(fr = NULL){
        printf("fr is null\n");
}
else{
        printf("fr opened\n");
}

int ch = fgetc(fr);
ch = fgetc(fr);
4

3 に答える 3

5

開いている FILE* に NULL を割り当てています。

変化する

if(fr = NULL){

if(fr == NULL){
于 2013-02-06T11:25:22.200 に答える
1

fr = NULLの状態でそれifは割り当てです。あなたはおそらく比較を意味していました: fr == NULL.

于 2013-02-06T11:26:05.413 に答える
0

あなたはそれのこの部分を手に入れました:

if (fr = NULL)

次のようにする必要があります。

if (fr == NULL)

またはさらに良い:

if (NULL == fr)

ただし、あなたのポイントに関して言及したいと思いましAlso, it successfully prints "fr opened."た。誤った割り当てのために、それを再度印刷しました。

if (fr = NULL)

最初は に設定frされるNULLため、チェックは基本的に次のようになりました。

if(fr)

と評価されたfrのでこうしてs「fr open」メッセージを見ました。NULLif(0)else

于 2013-02-06T12:21:43.507 に答える