私のプログラムでは、int
値をに入力しますargv[1]
。if
次のようなステートメントを入れる必要があります。
num = 3;
if (argv[1] == num)
{
[...]
}
警告が表示されます:comparison between pointer and integer [enabled by default]
これらの 2 つの値を比較するにはどうすればよいですか?
argv
に渡されるは、文字列main
の配列であることに注意してください。
atoi
or などの関数を使用して、文字列を整数に変換できますstrtol
(後者が推奨される代替方法です)。または、整数を文字列に変換して、strcmp
.
num
は整数ですが、 は整数をargv[1]
表している (または表していない) 文字列です。同じタイプのアイテムのみを比較できるため、文字列対文字列または整数対整数のいずれかを比較します。
if (strcmp(argv[1], "3") == 0) {
// ...
}
また
if (atoi(argv[i]) == 3) {
// ...
}
2 番目の方法は、ゼロと比較しようとすると崩壊します (atoi
エラーを示すためにゼロを返します)。
コマンドライン引数は文字列です。最初にこれらの文字列を変換する必要があります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 */
...
num = 3;
if (atoi(argv[1]) == num)
{
[...]
}
さまざまな方法を使用して argv[1] から数値を読み取り、num と比較する必要がある場合があります。(s*scanf)
あなたにとって最も具体的なもの: http://pubs.opengroup.org/onlinepubs/7908799/xsh/strtol.html
または、num を文字列に出力し、argv[1] (s*printf) で strcmp を実行します。