提问者:小点点

带有“-”前缀的命令行参数


我正在尝试编写一个程序,我将能够从自定义参数开始。 如本例中的“program.exe-width 1920-height 1080”。 我写了一个简单的代码,应该可以工作。

#include <iostream>

int main(int argc, char* argv[])
{
    for (int i = 1; i < argc; i++)
    {
        if (argv[i] == "-width")
        {
            std::cout << "Width: " << argv[++i] << "\n";
        }
        else if (argv[i] == "-height")
        {
            std::cout << "Height: " << argv[++i] << "\n";
        }
    }

    return 0;
}

而这个程序不管用。 它没有显示任何东西。 我还尝试用调试器逐行检查这段代码,但当argv[I]==“-width”时,它只是跳过它。

有没有一种方法可以解决这个问题,或者有没有其他的方法可以解决这个问题?


共2个答案

匿名用户

您正在比较指针,而不是字符串。 要通过==比较字符串,应该使用std::string

还应该检查元素argv[++i]是否存在。

#include <iostream>
#include <string>

int main(int argc, char* argv[])
{
    for (int i = 1; i < argc; i++)
    {
        if (argv[i] == std::string("-width") && i + 1 < argc)
        {
            std::cout << "Width: " << argv[++i] << "\n";
        }
        else if (argv[i] == std::string("-height") && i + 1 < argc)
        {
            std::cout << "Height: " << argv[++i] << "\n";
        }
    }

    return 0;
}

匿名用户

也可以使用s后缀

cout << ("wilson" == "wilson"s) << endl;

输出:

1