为啥 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::string
或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"))
【讨论】:
@Kon 看不懂的请不要编辑代码 @Kon 你的编辑把正确的代码变成了错误的代码。【参考方案2】:argv[1]
是一个指针 (char *
)。您不能使用 ==
将其与“字符串”进行比较,它总是返回 false。你应该使用strcmp
:
if (strcmp(argv[1], "string") == 0)
【讨论】:
以上是关于为啥 if 语句忽略命令行参数? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
Sencha Cmd 损坏:为啥“应用程序构建”会忽略任何命令行参数?