【问题标题】:Why the if statement is ignoring the command line argument? [duplicate]为什么 if 语句忽略命令行参数? [复制]
【发布时间】:2020-11-03 19:39:51
【问题描述】:

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

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

但是当我使用program.exe string 运行它时,什么也没有发生。这段代码有什么问题?

【问题讨论】:

标签: c++ visual-c++


【解决方案1】:

问题在于两个操作数都是 C 字符串,并且比较进行的是原始指针比较。您需要将至少一个操作数设为std::stringstd::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"))

【讨论】:

  • @Kon 看不懂的请不要编辑代码
  • @Kon 你的编辑把正确的代码变成了错误的代码。
【解决方案2】:

argv[1] 是一个指针 (char *)。您不能使用 == 将其与“字符串”进行比较,它总是返回 false。你应该使用strcmp:

if (strcmp(argv[1], "string") == 0)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-19
    • 1970-01-01
    • 1970-01-01
    • 2020-03-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多