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()函数