2012-05-05 16 views
0
int main(int argc, char *argv[]) 
{ 
    cout << strcmp(argv[1], "id"); 
    return 0; 
} 

それはfalseを返します。私は何が欠けていますか?私はそれが働いてしまったコマンドライン引数の文字列比較が機能しないのはなぜですか?

おかげで、4分で答えを受け入れるだろう。

+0

あなたは常にプログラムが引数を取得したかどうかを確認する必要があり – Satya

+1

どのようにコマンドラインからプログラムを呼び出しています。 – mikithskegg

答えて

7

strcmp戻り0、C文字列が比較される場合に同じです。 0 == false、それは実際に働いています。

+0

if(argc == 2 && strcmp(argv [1]、 "id"))私はそれを好きなように使っています ai.exe id しかしこのコードブロックは実行されません。 – Ren

+2

'if(argc == 2 &&!strcmp(argv [1]、" id "))' –

+1

あなたは実際に私の答えを読んだことがありますか?あなたはまったく逆のことをしています。 – mfontanini

2

strcmp戻り0 2つの文字列がequalある場合。

ヒント:この使用バウンド例外(セグメンテーションフォールト)のうちの配列を避けるために:ちょうどARGVを出力することによって開始することが容易になり

if (argv < 2) return 0; 
0

を[1]:

cout << argv[1] << endl; 

そして、あなたはargv [1]にどんな価値をもたらしているのかを見て、それをそこから取ることができます。あなたのコードには何も問題はないので、正しいargv [1]パラメータを渡すためにIDEを正しく構成していないと推測しています。

上記のように、になる必要がありますが、偽ではありません。

+0

事実、私は "id"を渡して "id"と比較し、argv [1] == "id"はfalseです。 strcmp()は0を返しますが、これは最初の答えのコメントに記載されているように1ブロックのコードは実行されません。 – Ren

+0

Cの場合、 "id"は文字列の 'i'を指し示す' char * 'を返します。 'argv [1]'は別の 'char *'です。だから 'argv [1] ==" id "'は2つの文字列ポインタを比較し、指す文字列は比較しません。だからこそ、それは偽を返します。 – craigmj

関連する問題