C++ 命令行界面帮助消息不会显示

C++ command line interface help message wont display

我正在尝试用 C++ 制作 CLI 应用程序。这是我第一次用 C++ 编码。

我有这个 C++ 代码:

#include <iostream>
// using namespace std;

static void help(std::string argv)
{
    std::cerr << "Usage:" << argv << " [options]\n"
        << "Options:\n"
        << "-h (--help): Displays this help message.\n"
        << "-o (--output=[output file]): Specifies the output file.\n"
        << "-p (--ports=[ports]) Sets the ports to scan.\n"
        << std::endl;
}

int main(int argc, char** argv)
{
    if (argc > 1)
    {
        std::cout << argv[1] << "\n";
        if (argv[1] == "-h" || argv[1] == "--help")
        {
            help(argv[0]);
            return 0;
        }
    } 
    else 
    {
        std::cout << "No arguments were given" << "\n";
    };
};

// g++ -o cli main.cpp

有效!我编译的时候成功输出了No arguments were given,但是当我编译运行cli -h的时候,可以看到argv[1]是-h,但是没有输出

我做错了什么?

在您的字符串比较中,argv[1] 是一个 C 字符串:一个以 null 结尾的 char 数组。您无法将这些与 == 进行比较并获得您期望的结果。但是,如果您将它分配给 std::string,您可以按照您想要的方式将它与 "-h""--help" 进行比较。

std::string arg1 = argv[1];
if (arg1 == "-h" || arg1 == "--help") {
    help(argv[0]);
    return 0;
}

或者您可以使用 std::strcmp 来比较 C 字符串而不创建新的 std::string。为此,您需要 #include <cstring>.

if (std::strcmp(argv[1], "-h") == 0 || std::strcmp(argv[1], "--help") == 0) {
    help(argv[0]);
    return 0;
}