为啥 if 语句忽略命令行参数? [复制]

Posted

技术标签:

【中文标题】为啥 if 语句忽略命令行参数? [复制]【英文标题】: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 运行它时,什么也没有发生。这段代码有什么问题?

【问题讨论】:

如果你打开警告,你就会知道为什么会这样gcc.godbolt.org/z/a7Pqf1 我使用 msvc++ 作为编译器而不是 gcc MSVC 产生了同样的警告gcc.godbolt.org/z/b8dYax 身份证。我没有收到任何错误消息...imgur.com/a/8TeF5ws 只是一些关于无关事物的警告 【参考方案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)

【讨论】:

以上是关于为啥 if 语句忽略命令行参数? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

Sencha Cmd 损坏:为啥“应用程序构建”会忽略任何命令行参数?

为啥我的 IF 在我的 PL?SQL 脚本中被忽略? [复制]

gtest命令行测试案例

如何将命令行参数传递给 c 程序

Python 中最好用的命令行参数解析工具

我如何处理 java 命令行参数? [复制]