C++ 参数比较

C++ arguments comparison

你好,我正在尝试读取一些参数并处理它们,但是当我尝试通过 if else 梯形图读取参数时出现问题

int main (int argc, char *argv[])
{
cout << argv[1] << endl;
if (argv[1] == "process")
    cout << "yes" << endl;
else
    cout << "no" << endl;
}

此代码输出:

process

no

你知道为什么输出是 no 而不是 yes 吗?

顺便说一下,我尝试将它们中的任何一个转换为字符串并将其与另一个进行比较,令人惊讶的是它起作用了,尽管我不明白为什么。

argv[1] 是一个指针,实际上是一个 char * (见定义 char *argv[]),而在你的代码中 "process" (这是一个 const char [] ) 也会衰减为 const char *,因此您基本上是在比较两个 char *.

既然char *只是简单的指针,那么你比较的是地址,而不是"string",显然argv[1]"process"不是存储在同一个地址。

如果将两者之一转换为std::string,则您正在比较std::stringchar *(或const char *),以及std::string char * 有一个超载的 operator== 所以它有效。

您可以使用 strcmpstrncmp.

比较 "C strings"(又名 char 数组)

argv[1] == "process" 比较指针。使用strcmp比较指针后面的字符串:

#include <string.h>

int main (int argc, char *argv[])
{
cout << argv[1] << endl;
if (strcmp(argv[1],"process")==0)
    cout << "yes" << endl;
else
    cout << "no" << endl;
}