微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么if语句忽略命令行参数?

如何解决为什么if语句忽略命令行参数?

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

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

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

解决方法

问题在于两个操作数都是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"))
,

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。