私のプログラムでは、int値をに入力しますargv[1]。if次のようなステートメントを入れる必要があります。
num = 3;
if (argv[1] == num)
{
[...]
}
警告が表示されます:comparison between pointer and integer [enabled by default]
これらの 2 つの値を比較するにはどうすればよいですか?
argvに渡されるは、文字列mainの配列であることに注意してください。
atoior などの関数を使用して、文字列を整数に変換できます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 を実行します。