2017-11-09 19 views
1

残りのプログラムで必要なコマンドのコマンドライン引数を調べるために、strcmpを使用して、指定された引数が正しいかどうかをテストしました。C++コマンドライン引数とstrcmpの比較

if((argc != 2) || (strcmp(argv[1], "-first") != 0) || (strcmp(argv[1], "-all") != 0)) 
    return -1; 

このコードは、次のエラーでの直近のプログラムが発生します。

Program ended with exit code: 255 

私は問題は2つのstrcmp関数呼び出しから来ているが、私は研究してきたものから、私と判断しましたそれらを正しく使用しています。

答えて

2

このif文は、常に入力されます。 argv[1]が2つの文字列の1つと等しくない場合は、入力します。しかし、それはいつも真実です。それが-firstの場合は明らかに-allではありません。 -allの場合は、明らかに-firstではありません。

したがって、プログラムは常に何らかのエラー状態で復帰します。

if(argc != 2 || (strcmp(argv[1], "-first") != 0 && strcmp(argv[1], "-all") != 0)) 
    return -1; 

は、私はまた、いくつかの過度に慎重な括弧を削除する自由を取った:あなたが何をしたいか

argv[1]はオプションすべてと等しくないことを確認しています。適切な語彙演算子の優先順位を学ぶ必要があります。かっこを過度に使用すると、コードが不必要に乱雑になります。 が明瞭になるようにを追加するか、実際には必要なときに適用してください。

関連する問題