C++ '='(等号)命令行参数
C++ Command-Line Arguments with '=' (Equal) Sign
如果C++中的命令行选项包含等号,我如何解析它?例如:
./testApp --parameter1=value1
我使用以下行检查参数是否存在:
bool cmdOptionExists(char** begin, char** end, const std::string& option)
{
return std::find(begin, end, option) != end;
}
但是,如果参数包含等号,则将返回false
cmdOptionExists(argv, argv+argc, "parameter1");
偶数打印:
for(int i=0;i<argc;i++)
printf("Argument: %sn", argv[i]);
不包括参数1的任何指示。然而,删除等号将正确打印。
argv
中的命令行选项以空格分隔。因此,要么必须自己检测key=value
选项,要么使用命令行解析器。我建议Boost::程序选项。
示例:
namespace po = boost::program_options;
po::options_description desc("Allowed options");
desc.add_options()
("foo", po::value<std::string>(), "do bar")
;
po::variables_map vm;
po::store(po::parse_command_line(argc, argv, desc), vm);
po::notify(vm);
std::string foo;
if (vm.count("foo")) {
foo = vm["foo"].as<std::string>();
} else {
throw("Foo not set.");
}
您可以像解析其他内容一样解析它们。在您的例如,argv[1]
可能包含"--parameter1=value1"
。[1] 所以如果您想在'='
处断开它,请使用std::find
查找'='
,我会先把它转换成std::string
,但这个其实没有必要。对于以null结尾的字符串,如中所示argv[i]
,argv[i]
是"开始"迭代器,argv[i] + strlen(
argv[i] )
是"结束"迭代机。
[1] 从形式上讲,标准实际上并没有对此做太多说明,因为所有这些都发生在程序执行之前。几乎然而,最常见的系统将允许调用你的程序几乎可以传递任何东西—即使对于CCD_ 12,标准确实有点规定。所有的贝壳或我知道的命令处理器会使用空白来分解命令在没有元字符的情况下,将行转换为单词。(考虑什么元角色,以及如何对待他们,差异很大。)
相关文章:
- 如何在OMNET++中指定与命令行参数组合的输出文件名
- 如何处理linux终端中带有负号(-)的C++中的命令行参数
- 使用 C++ 将命令行参数拆分为参数/向量
- 如何在OMNET++中添加专门的命令行参数?
- 如何在不传递命令行参数的情况下在 c++ 中设置环境变量
- atoi() 在应用于大型命令行参数时会产生不正确的值
- 命令行参数,cant 或两个变量
- 在 Windows 中使用 boost::p rogram_options 从命令行参数读取 Unicode 字符
- 如何在 Android/NDK 上将命令行参数从 gradlew.bat 传递到 Clang
- 编写一个将 LLVM IR 文件作为命令行参数的程序
- 通过命令行参数获取llvm ir文件时面临问题
- 有没有办法根据命令行参数定义数组大小?运行时与编译时实例化?
- 如何在不使用文件扩展名的情况下使用命令行参数打开C++中的文本文件?
- 命令行参数在不到 3 个 LOC 中 int?
- 在命令行参数中使用引号
- 在VS2013中使用devenv (C++)传递命令行参数argv
- 二进制数据作为命令行参数
- 如何在 C++11 中创建具有命令行参数大小的动态数组?
- 需要有关如何设置getopt_long以正确传递命令行参数的建议
- Bash 脚本和命令行参数