1

2つのステートメントの違いは何ですか?どちらが正しいもので、何を使用する必要がありますか?

fp は、使用されるファイル ポインタです。

if(fp!= '\n')

警告を受ける

C4047: '!=' : 'FILE *' differs in levels of indirection from 'int'

if(fp!= NULL)

警告が表示されません。

以下の完全なコード スニペット

if(fp!= NULL)
    {
        fgets(mystring,BUFSIZ,fp);
        puts(mystring);
    }
4

2 に答える 2

2

2つのステートメントの違いは何ですか?どちらが正しいもので、何を使用する必要がありますか?

違いについて:
fp != '\n'ポインタを整数と比較しようとします。これは無意味です。が null ポインタ
fp != NULLかどうかを調べます。fpこれは賢明なことです。

どれが正しいかについて:
この質問は、そのうちの 1 つが実際に正しいことを前提としています。(しかしfp != '\n'、間違いなく間違っています。)

何を使用すべきかについて:
それは、何をしようとしているのかによって異なります。

このコード:

fgets(mystring,BUFSIZ,fp);
puts(mystring);

の戻り値を無視しているため、バグもあります。fgetsこれにより、fgets成功したかどうか、したがってmystringが有効な文字列に設定されたかどうかがわかります。

于 2013-01-17T10:46:52.690 に答える
1

'\n'int入力され、コードのように宣言する必要があるCFILE ポインターと比較してい ます。したがって、この行は 間違っており、意味が少なくなります。と比較。 fpFILE* fpif(fp!= '\n')FILE*int

正しいのは次のとおりです。

if(fp!= NULL)fpが有効なファイルを指している かどうかをチェックします。

fp = fopen("filename","r");  
:
:
if(fp!= NULL)
{   // if file open successfully  
    fgets(mystring,BUFSIZ,fp);
    puts(mystring);
} 

fp = fopen("filename","r");関数fopen()がファイルを開くのに失敗した場合、NULL を返します 。

コードfgetsで使用されているため、なぜ私はユーザー"r"モード..

于 2013-01-17T10:43:49.613 に答える