C++参数比较

C++ arguments comparison

本文关键字:比较 参数 C++      更新时间:2023-10-16

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

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

该代码输出:

处理

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

顺便说一句,我试图将它们中的任何一个转换为字符串,并将其与另一个进行比较,结果令人惊讶,尽管我不知道为什么

argv[1]是一个指针,实际上是一个char *(请参阅定义char *argv[]),在您的代码中,"process"(即const char [])也衰减为const char *,因此您基本上是在比较两个char *

由于char *只是指针,所以您比较的是地址,而不是"字符串",显然argv[1]"process"不是存储在同一地址。

如果将两者中的一个转换为std::string,则比较的是std::stringchar *(或const char *),而std::stringchar *具有过载的operator==,因此可以正常工作。

您可以使用strcmpstrncmp来比较"C字符串"(也称为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;
}