1

端末に問題がありましたが、次のようなものが合法かどうか疑問に思っていました:

int main(int argc, char *argv[])
{
    if(argv[3] = "today")
    {
        //do something
    }
}

それ以外の場合、c-strings を使用してそれらを比較できますか?

4

5 に答える 5

3

いいえ、それは構文的にも論理的にも合法ではありません。

を使用する必要がありますstrcmp

if (argc >= 4 && strcmp(argv[3], "today") == 0) {
    //matched
}

(または、Dietmar Kühl が示唆したように、 std::string を使用して、コーディング ライフを大幅に簡素化することもできます。)

于 2012-10-18T04:09:17.433 に答える
2

プログラムの引数はchar配列への単なるポインタです。文字列の内容ではなくポインタを比較しています。最も簡単な方法は、 を使用して引数を比較することです。次にstd::string例を示します。

if (argv[3] == std::string("today")) {
    ...
}
于 2012-10-18T04:09:16.127 に答える
2
int main(int argc, char *argv[])
{
    std::vector<std::string> arguments(argv, argv + argc);
    if (arguments[3] == "today")
    {
        //do something
    }
}
于 2012-10-18T04:32:42.487 に答える
0

char* or arrays=演算子とは比較できません。strcmp()関数を使用する必要があります

int main(int argc, char *argv[])
{
    if(strcmp(argv[3], "today") == 0)
    {
        //do something
    }
}
于 2012-10-18T04:11:42.333 に答える
0

それは常にfalseを返します。2 つの文字列ではなく、2 つのアドレスを比較しています。やりたいことは、これらのアドレスの内容を比較するか、文字列自体を比較することです。

C では、次の関数を使用することをお勧めしますstrcmp

if (strcmp(argv[3], "today") == 0) {
   // Do something
}

C++ では、文字列を使用します。

if (std::string("today") == argv[3]) {
   // Do something
}
于 2012-10-18T04:12:25.467 に答える