C++ C++;比较c字符串故障

C++ C++;比较c字符串故障,c++,string,c-strings,C++,String,C Strings,我已经编写了下面的代码,但当我修改它时,第二个代码片段将不起作用 int main( int argc, char *argv[] ) { if( argv[ 1 ] == "-i" ) //This is what does not work //Do Something } 但是如果我这样写代码,这就行了 int main( int argc, char *argv[] ) { string opti = "-i"; if( argv[ 1 ] == opti

我已经编写了下面的代码,但当我修改它时,第二个代码片段将不起作用

int main( int argc, char *argv[] )
{
  if( argv[ 1 ] == "-i" )   //This is what does not work
     //Do Something
}
但是如果我这样写代码,这就行了

int main( int argc, char *argv[] )
{
  string opti = "-i";

  if( argv[ 1 ] == opti )   //This is what does work
     //Do Something
}
是否因为string类将==作为重载成员,因此可以执行此操作

提前谢谢

是否因为string类将==作为重载成员,因此可以执行此操作

你说得对。
char*
类型的常规值没有重载运算符。要比较C字符串

if (strcmp(argv[1], "-i") == 0) {
    ...
}

通过比较字符串的方式(直接使用
==
),可以比较指针的值。由于
“-i”
是一个编译时常量,而
argv[1]
是另一个常量,因此它们永远不会相等。

正确。当您执行
argv[1]==“-i”
(在两个
char*
表达式上使用==时),您是在比较指针是否相等,而不是字符串中的字符。您必须使用
strcmp
函数来比较字符串数据


std::string
有重载运算符来检查string==string、char*==string和string==char*,但是不可能重载char*==char*,因为这已经有了定义的含义:比较指针。

这个在C中可以正常工作。记住检查argc,这样就不会出现seg错误。还有strncmp(),这是比较字符串的一种更安全的方法,因为您可以限制字符串的最大长度

#include <string.h>
#include <stdio.h>

int main( int argc, char *argv[] )
{
  if((argc > 1) && (strcmp(argv[1], "-i") == 0))
  {
      printf("got -i\n");
  }
}
#包括
#包括
int main(int argc,char*argv[])
{
如果((argc>1)和&(strcmp(argv[1],“-i”)==0))
{
printf(“got-i\n”);
}
}

如果要将多个参数作为命令选项传递,请检查使用strcmp是否有任何问题?我只是想知道这样做的好处…看起来您正在尝试阅读命令行选项。如果您在linux机器上,请检查getopt()函数