我已经编写了以下代码,但是当我更改它时,第二个代码段将不起作用。
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
}
是因为字符串类将==作为重载成员,因此可以执行此操作吗?
提前致谢。
答案 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()