如何解决为什么if语句忽略命令行参数?
int main(int argc,char* argv[]) {
if (argv[1] == "string") {
cout<<"STRING AS ARG!!"<<endl;
}
return 0;
}
但是当我使用program.exe string
运行它时,什么也没有发生。代码段有什么问题?
解决方法
问题在于两个操作数都是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"))
,
argv[1]
是一个指针(char *
)。您无法使用==
将其与“字符串”进行比较,它将始终返回false。您应该使用strcmp
:
if (strcmp(argv[1],"string") == 0)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。