1

可能重复:
C 字符串 — 使用相等运算符 == 比较两个字符串是否相等

这里的基本问题。我正在用 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;
}  
4

4 回答 4

6

您不能使用 比较字符串文字==,因为它所做的是比较指针(即内存地址,在这种情况下总是不同的)。

改为使用strcmp或比较std::string对象:

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

或者

if (std::string(argv[1]) == "-r") { ... }
于 2012-11-27T10:06:49.043 回答
1

您不能将字符串文字与 == 进行比较。使用 strcmp。

(另外,不要忘记检查 argc 是否至少为 2)。

于 2012-11-27T10:09:36.290 回答
1

您的代码中的一个错误是您正在比较 char 数组的地址,而不是比较数组中的值。正如人们所说,您可以C使用 using 的方式进行操作strcmp(尽管使用它strncmp来避免缓冲区溢出更安全)。

但是,它更容易std::string在 C++ 中使用。

我会将 args 复制到字符串向量中。

#include <vector>
#include <string>

int main(int argc, char* argv[])
{
    vector<string> args(argv, argv+argc);
    ...
于 2012-11-27T10:26:39.813 回答
0

通常你会按照以下方式做一些事情:

while (--argc && **++argv=='-')
{
   char *p;
    p=*argv+1;
    switch(tolower(*p))
    {
        case 'r':                                       
            break;

    }
}

基本上,虽然还有一些 args,但检查是否有一个 '-' 字符,然后打开下一个字符以查看修饰符('r' 或 'a' 等)

于 2012-11-27T10:12:25.657 回答