c++ - 等于在 C++ 中返回 false

标签 c++ g++ command-line-arguments

我对 cpp 还很陌生,我正在尝试做一个项目。它说代码必须以文件名作为参数,并将由以下人员运行:

./main -i filename

我编写了一个 for 循环,它将遍历参数列表以找到“-i”参数,以便确定文件名。但是这一行总是返回 false:

argv[i] == "-i"

下面是我的代码:

#include <string>
#include <iostream>

int main(int argc, char *argv[]) {
    std::string test = argv[0];
    for(int i = 0; i < argc; i++){
        if(argv[i] == "-i"){
            test = argv[i+1];
            break;
        }
    }
    std::cout << test;
    return 1;
}

最佳答案

argv[i] == "-i"

在上面的行中,您比较了两个指针:分别为 char*const char*

换句话说,不是比较 argv[i]"-i" 两个指针,而是比较不太可能指向同一位置的两个指针。因此,该检查不适用于您的情况。

您可以通过多种方式修复它,例如将 "-i" 包装到 std::string 以使比较正常工作:

const auto arg = std::string{ "-i" };

for(int i = 0; i < argc; i++){
    if(argv[i] == arg){
        test = argv[i+1];
        break;
    }
}

C++17 开始,您还可以使用 std::string_view :

const std::string_view sv{ "-i" };

for(int i = 0; i < argc; i++){
    if(argv[i] == sv){
        test = argv[i+1];
        break;
    }
}

这是一种更可取的方式,因为它避免了 std::string 创建。

关于c++ - 等于在 C++ 中返回 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52607440/

相关文章:

c++ - 在字符数组中输入数字

c++ - 将基指针转换为派生指针有任何危险吗?

c++ - 如何在 Qt 中提供编译器选项?

python-3.x - 如何在 Python 3.x 中传递命令行参数?

java - 代码在 Netbeans 中编译并运行,但不在 java 命令行中编译和运行

c# - 如何转义包含空格的路径

c++ - Windows 中的 Qt : build environment and redistribution problems

c++ - 在 B 类中声明为友元的 A 类成员模板函数无法访问 A 类的私有(private)成员(仅限 Clang)

c++ - g++ 可变参数模板问题

c++ - 函数 g++ 6.2 的自动类型推导