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

那将始终返回错误。您正在比较两个地址,而不是两个字符串。您要做的是比较这些地址的内容,或比较字符串本身。

在 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 回答