私はこのコードを持っている:argvを比較できませんか?
if (argv[i] == "-n")
{
wait = atoi(argv[i + 1]);
}
else
{
printf("bad argument '%s'\n",argv[i]);
exit(0);
}
このコードが実行されます場合は、私は次のエラーを取得:
bad argument '-n'
を、それはそれを行う理由を私は真剣に知りません。誰か説明できますか?
私はこのコードを持っている:argvを比較できませんか?
if (argv[i] == "-n")
{
wait = atoi(argv[i + 1]);
}
else
{
printf("bad argument '%s'\n",argv[i]);
exit(0);
}
このコードが実行されます場合は、私は次のエラーを取得:
bad argument '-n'
を、それはそれを行う理由を私は真剣に知りません。誰か説明できますか?
文字列の比較には、Cの関数が必要です。通常、strcmp()
から<string.h>
までです。
if (strcmp(argv[i], "-n") == 0)
{
wait = atoi(argv[i + 1]);
}
else
{
printf("bad argument '%s'\n",argv[i]);
exit(0);
}
strcmp()
関数は(必ずしも-1)負の値を返す場合は第二の前に最初の引数ソート。最初の引数が2番目の引数の後にソートする場合は正の値(必ずしも+1ではない)。 2つの値が等しい場合はゼロを返します。
==
演算子は、このアプリケーションでは文字列が効果的に文字ポインタであり、ポインタが比較されるため、文字列の内容には作用しません。
文字列の内容を比較するには、strcmp
またはstrncmp
を使用します。
ポインタを比較しています(argv[i]
と"-n"
はchar*
とconst char*
です)。
代わりにstrcmp()
を使用してください。
あなたが実際にやっていることは、ポインタの比較です。 argv [i]は文字列ではなく、メモリ内の実際の文字列が始まる場所へのポインタです。 strcmp()を使用します。
文字列の内容ではなくポインタを比較しています。 argv[i]
と"-n"
は、文字列内の文字が等しい場合でも、メモリ内の2つの異なる場所に格納された2つの異なる文字列です。
Cでは、演算子==
は等しいかどうかを比較します。
同じ数値型の値が単純な方法で比較されます(つまり、2 + 2 == 4
がtrue)。
異なる整数型(および非整数型)の値は、ある程度変換されます。他の場所を参照してください。
ポインタは同じアドレスのポイントであれば等しい。
文字列リテラルは、他のものと重複しないようにメモリ内に配置されます。 argv [i](i = 0〜argc)が指すものと重複しないことも含めて
したがって、2つの不等なポインタを比較しています。それが理由です。 if (!strcmp(argv[i], "-n")) { ... }
を使用します。
int equal(char* stringa, char* stringb) {
while((*stringa) && (*stringb)) {
if(*stringa!=*stringb)
return FALSE;
stringa++;
stringb++;
}
return TRUE;
}
も私
のために働いています