1

私のプログラムでは、int値をに入力しますargv[1]if次のようなステートメントを入れる必要があります。

num = 3;    
if (argv[1] == num)
{
   [...]
}

警告が表示されます:comparison between pointer and integer [enabled by default]
これらの 2 つの値を比較するにはどうすればよいですか?

4

5 に答える 5

3

argvに渡されるは、文字列mainの配列であることに注意してください。

atoior などの関数を使用して、文字列を整数に変換できますstrtol(後者が推奨される代替方法です)。または、整数を文字列に変換して、strcmp.

于 2012-06-20T10:05:55.260 に答える
3

numは整数ですが、 は整数をargv[1]表している (または表していない) 文字列です。同じタイプのアイテムのみを比較できるため、文字列対文字列または整数対整数のいずれかを比較します。

if (strcmp(argv[1], "3") == 0) {
    // ...
}

また

if (atoi(argv[i]) == 3) {
    // ...
}

2 番目の方法は、ゼロと比較しようとすると崩壊します (atoiエラーを示すためにゼロを返します)。

于 2012-06-20T10:06:26.673 に答える
1

コマンドライン引数は文字列です。最初にこれらの文字列を変換する必要がありますatoi(推奨されません) またはstrtol/ strtoul(より良いのは、エラー処理があります)。次に、変換された値を使用して、比較したい整数と比較します。

char *endptr;
errno = 0;
long int n = strtol(argv[ i ], &endptr, 10);
if (endptr == argv[2])
    ...;  /* no conversion */
else if (*endptr != '\0')
    ...;  /* conversion incomplete */
else if (errno == ERANGE)
    ...;  /* out of `long int''s range */
...
于 2012-06-20T10:03:53.857 に答える
1
num = 3;    
if (atoi(argv[1]) == num)
{
   [...]
}
于 2012-06-20T10:04:52.750 に答える
0

さまざまな方法を使用して argv[1] から数値を読み取り、num と比較する必要がある場合があります。(s*scanf)

あなたにとって最も具体的なもの: http://pubs.opengroup.org/onlinepubs/7908799/xsh/strtol.html

または、num を文字列に出力し、argv[1] (s*printf) で strcmp を実行します。

于 2012-06-20T10:03:41.390 に答える