C ++参数比较

时间:2015-12-18 13:36:34

标签: c++ string parameters comparison

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

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

此代码输出:

  

过程

     

没有

你知道为什么输出没有而不是

顺便说一下,我尝试将其中任何一个转换为字符串并将其与另一个字符串进行比较,令人惊讶的是它有效,即使我无法弄清楚原因。

2 个答案:

答案 0 :(得分:2)

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

由于char *只是指针,因此您要比较地址,而不是&#34;字符串&#34;,显然argv[1]"process"不会存储在同一地址。

如果您将其中一个转换为std::string,那么您要比较std::stringchar *(或const char *),而std::string有一个为operator==重载char *,以便它可以正常工作。

您可以比较&#34; C字符串&#34; (又名char数组)使用strcmpstrncmp

答案 1 :(得分:2)

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;
}