可能重复:
C String — Using Equality Operator == for comparing two strings for equality
基本问题在这里。我正在用g ++编译这个程序并使用单个-r参数(./a.out -r)运行它,但是它不输出下面指定的cout语句。这段代码有什么问题吗?
#include <string>
using namespace std;
int main(int argc, char* argv[]) {
if (argv[1] == "-r" ) {
cout << "First arg is -r" << endl;
}
return 0;
}
答案 0 :(得分:6)
您无法使用==
比较字符串文字,因为它的作用是比较指针(即内存地址,在这种情况下总是会有所不同)。
使用strcmp
或比较std::string
个对象:
if (strcmp(argv[1], "-r") == 0) { ... }
或
if (std::string(argv[1]) == "-r") { ... }
答案 1 :(得分:1)
您无法将字符串文字与==进行比较。使用strcmp。
(另外,不要忘记检查argc是否至少为2)。
答案 2 :(得分:1)
代码中的一个错误是您正在比较char数组的地址,而不是比较数组中的值。正如人们所说,你可以C
方式使用strcmp
(尽管使用strncmp
来避免缓冲区溢出更安全)。
但是,在C ++中使用std::string
会更容易。
我会将args复制到字符串向量中。
#include <vector>
#include <string>
int main(int argc, char* argv[])
{
vector<string> args(argv, argv+argc);
...
答案 3 :(得分:0)
通常你会沿着这些方向做点什么:
while (--argc && **++argv=='-')
{
char *p;
p=*argv+1;
switch(tolower(*p))
{
case 'r':
break;
}
}
基本上,虽然还有一些args,但检查是否有' - '字符,然后打开下一个字符以查看修饰符('r'或'a'等)