为什么我的命令行参数没有被读取?

Why aren't my commandline arguments being read?

本文关键字:读取 我的 命令行 参数 为什么      更新时间:2023-10-16

我在程序中调用这个:

std::string gameDirectory = "";
for (int i = 1; i < argc; i++)
    {
        if (argv[i] == "-game")
            gameDirectory = argv[i + 1];
    }
    if (gameDirectory == "")
        exit(0);

使用命令行参数

-game demo

,它拒绝设置gameDirectory。什么好主意吗?

argv[i]的类型为const char*,指针的直接比较只有在它们指向相同位置时才返回true。程序参数永远不会指向与现有常量字符串相同的位置,因此永远不会访问if

您要么需要将任意字符串设置为std::string(它具有==重载以与char指针进行比较),要么使用strcmp来比较参数。

if (strcmp(argv[i], "-game") == 0)

打开编译警告!!

main.cpp: In function 'int main(int, char**)':
main.cpp:8:24: warning: comparison with string literal results in unspecified behaviour [-Waddress]
         if (argv[i] == "-game")
                        ^

这个警告告诉你所有你需要知道的(现场)。

使用strcmp比较c -string