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;
}
我正在尝试用 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;
}