我无法将main()
个参数与const char*
个字符串进行比较。
简单的解释代码:
#include <stdio.h>
int main(int argc, char *argv[])
{
int i;
if(argc>1)
{
for (i=1;i<argc;++i)
{
printf("arg[%d] is %s\n",i,argv[i]);
if(argv[i]=="hello")
printf(" arg[%d]==\"hello\"\n",i);
else
printf(" arg[%d]!=\"hello\"\n",i);
}
}
return 0;
}
简单编译g++ test.cpp
。当我尝试执行它时,我会看到下一件事:
>./a.out hello my friend
arg[1] is hello
arg[1]!="hello"
arg[2] is my
arg[2]!="hello"
arg[3] is friend
arg[3]!="hello"
我的代码有什么问题?
答案 0 :(得分:2)
答案 1 :(得分:2)
无论何时使用argv [i] ==“hello”,运算符“==”都不要将字符串作为其操作数,因此实际上编译器将指向argv [i]的指针与指向常量字符串“Hello”的指针进行比较这总是假的,因此你得到的结果是正确的,比较字符串文字使用srtcmp函数。 int strcmp(const char * s1,const char * s2); 它比较了两个字符串s1和s2。如果找到s1,则返回小于,等于或大于零的整数,小于,匹配或大于s2。
答案 2 :(得分:1)
在本声明中
if(argv[i]=="hello")
比较指针,因为字符串文字被隐式转换为指向其第一个字符的const char *(或C中的char *)。由于两个指针具有不同的值,因此表达式始终为false。你必须使用标准的C函数strcmp。例如
if( std::strcmp( argv[i], "hello" ) == 0 )
要使用此功能,您应该包含标题<cstring>
(在C ++中)或<string.h>
(在C中)。