端末に問題がありましたが、次のようなものが合法かどうか疑問に思っていました:
int main(int argc, char *argv[])
{
if(argv[3] = "today")
{
//do something
}
}
それ以外の場合、c-strings を使用してそれらを比較できますか?
端末に問題がありましたが、次のようなものが合法かどうか疑問に思っていました:
int main(int argc, char *argv[])
{
if(argv[3] = "today")
{
//do something
}
}
それ以外の場合、c-strings を使用してそれらを比較できますか?
いいえ、それは構文的にも論理的にも合法ではありません。
を使用する必要がありますstrcmp
。
if (argc >= 4 && strcmp(argv[3], "today") == 0) {
//matched
}
(または、Dietmar Kühl が示唆したように、 std::string を使用して、コーディング ライフを大幅に簡素化することもできます。)
プログラムの引数はchar
配列への単なるポインタです。文字列の内容ではなくポインタを比較しています。最も簡単な方法は、 を使用して引数を比較することです。次にstd::string
例を示します。
if (argv[3] == std::string("today")) {
...
}
int main(int argc, char *argv[])
{
std::vector<std::string> arguments(argv, argv + argc);
if (arguments[3] == "today")
{
//do something
}
}
char* or arrays
=
演算子とは比較できません。strcmp()
関数を使用する必要があります
int main(int argc, char *argv[])
{
if(strcmp(argv[3], "today") == 0)
{
//do something
}
}
それは常にfalseを返します。2 つの文字列ではなく、2 つのアドレスを比較しています。やりたいことは、これらのアドレスの内容を比較するか、文字列自体を比較することです。
C では、次の関数を使用することをお勧めしますstrcmp
。
if (strcmp(argv[3], "today") == 0) {
// Do something
}
C++ では、文字列を使用します。
if (std::string("today") == argv[3]) {
// Do something
}