1

指定された引数が有効なファイルであることを確認するために、コードでエラー チェックを実行しようとしています。次のコード:

int main(int argc, char *argv[]){
    for(int i = 1, i <=argc, i++){
         FILE *fileIn = fopen(argv[i],"r");
         if(fileIn == NULL){
                fprintf(stderr,"The file %s doesn't exist.",fileIn);
         }
         else if (fileIn != NULL){
             do a bunch of stuff, including printing out values from a struct
         }

私が抱えている問題は、プログラムを実行すると、これが出力として得られることです。

The (null) file doesn't exist
Output from else if loop

したがって、基本的には、fileInがnullであると同時にnullではないということです。ファイルを正常に読み取り、正常に実行していますが、毎回エラーが発生します。argv[i などにポインタを割り当てる方法はありますか? これはどのように起こっていますか?

4

2 に答える 2

5

コードが何度もループしています。は<= argc、実際に存在するよりも 1 つ多い引数を評価しています。そのはず:

for(int i = 1, i < argc, i++){

また、存在しないファイルの printf は次のようになります (名前が必要です)。

fprintf(stderr,"The file %s doesn't exist.",argv[i]);
于 2012-04-17T22:56:51.743 に答える
4

の不等式を変更します

for(int i = 1, i <=argc, i++){

for(int i = 1, i < argc, i++){

argcが 2 の場合、

argv[0] = プログラム名
argv[1] = 最初の引数

また、 をチェックしているif (fileIn == NULL)ので、再度チェックする必要はありません。そのまま使用してelseください。

于 2012-04-17T22:57:04.057 に答える