C ++比较c字符串的麻烦

时间:2010-01-04 06:14:28

标签: 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 )   //This is what does work
     //Do Something
}

是因为字符串类将==作为重载成员,因此可以执行此操作吗?

提前致谢。

3 个答案:

答案 0 :(得分:11)

  

是因为字符串类将==作为重载成员,因此可以执行此操作吗?

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

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

通过比较字符串的方式(直接使用==),您将比较指针的。由于"-i"是编译时常量而argv[1]是其他内容,因此它们永远不会相等。

答案 1 :(得分:9)

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

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

答案 2 :(得分:1)

这个可以在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");
  }
}

如果你传递多个参数作为命令选项,请查看getopt()