首页 > 解决方案 > 为什么 if 语句忽略命令行参数?

问题描述

我正在尝试制作一个带有一个参数的简单程序。我用作主要:

int main(int argc, char* argv[]) {
    if (argv[1] == "string") {
        cout<<"STRING AS ARG!!"<<endl;
    }
    return 0;
}

但是当我运行它时program.exe string没有任何反应。这段代码有什么问题?

标签: c++visual-c++

解决方案


问题是两个操作数都是 C 字符串,并且比较进行原始指针比较。您需要至少创建一个操作数 astd::string或 a std::string_view

std::string_view是最好的选择,因为它避免了 的开销std::string,但您需要 C++17:

#include <string_view>
using namespace std::literals;

if (argv[1] == "string"sv)

std::string版本。如果你有 C++14,你可以使用文字:

#include <string>
using namespace std::literals;

if (argv[1] == "string"s)

或者,如果您是 C++14 之前的版本:

#include <string>

if (argv[1] == std::string("string"))

推荐阅读