通过main中的char * argv []比较终端中传递的参数

时间:2012-10-18 04:07:27

标签: c++

我一直遇到终端问题,但我想知道这样的事情是否合法:

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

否则,我可以使用c-strings比较它们吗?

5 个答案:

答案 0 :(得分:3)

不,这在语法或逻辑上都不合法。

您需要使用strcmp

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

(或者,正如DietmarKühl建议的那样,你可以使用std :: string并大大简化你的编码生活。)

答案 1 :(得分:2)

程序参数只是指向char数组的指针。您正在比较指针而不是字符串内容。最简单的方法是使用std::string比较参数,例如:

if (argv[3] == std::string("today")) {
    ...
}

答案 2 :(得分:2)

int main(int argc, char *argv[])
{
    std::vector<std::string> arguments(argv, argv + argc);
    if (arguments[3] == "today")
    {
        //do something
    }
}

答案 3 :(得分:0)

char* or arrays无法与=运算符进行比较。您需要使用strcmp()函数

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

答案 4 :(得分:0)

总是会返回false。您正在比较两个地址,而不是两个字符串。你想要做的是比较这些地址的内容,或比较字符串本身。

在C中,首选方法是使用函数strcmp

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

在C ++中,使用字符串:

if (std::string("today") == argv[3]) {
   // Do something
}