为什么boost::p rogram_options接受切碎的单词
Why is boost::program_options accepting chopped words?
我有以下程序:
#include <boost/program_options.hpp>
bool check_options(int argc, char** argv)
{
using namespace boost::program_options;
variables_map vm;
// Command line options
std::string cfg_file_name;
options_description cmd_line("Allowed options");
cmd_line.add_options()
("help", "produce this help message")
;
store(parse_command_line(argc, argv, cmd_line), vm);
notify(vm);
if(vm.count("help"))
{
std::cout << cmd_line << std::endl;
return false;
}
return true;
}
int main(int argc, char** argv)
{
if(!check_options(argc, argv))
return 1;
return 0;
}
当我用./myprg --help
运行它时,我得到了我期望的结果:
Allowed options:
--help produce this help message
但是,即使我运行,我也得到相同的结果:./myprg --h
或./myprg --he
或./myprg --hel
。最后这些选项不应该抛出错误吗?
似乎接受部分匹配是boost::option
的default_style
。
根据Boost网站的回答 http://lists.boost.org/boost-users/2007/02/25861.php
可以通过向 parse_command_line
传递一个额外的参数来更改此默认值以要求完全匹配。
由OP编辑:实际上,我不得不使用更通用的command_line_parser
而不是parse_command_line
(允许更改样式),从而将store(...
行替换为以下行:
store(command_line_parser(argc, argv).options(cmd_line).style(command_line_style::default_style & ~command_line_style::allow_guessing).run(), vm);
相关文章:
- 文本文件中的单词链表
- 在指针的帮助下,文本文件中单词的频率
- 如何根据单词在文本中出现的概率输出单词
- 从字符串变量中逐字符读取单词
- 使用std::mt19937从字符串中返回一个随机单词
- 如何用for循环在c++中生成单词三角形
- 将数字转换为单词
- 使用if-else将数字转换为单词
- C++-字符串是否包含一个带有简单循环的单词
- 使用单词"not"作为C ++类的名称会导致VS2019错误
- 为什么这个程序返回最后一个单词而不是最长的单词?
- 3-3. 编写一个程序来计算每个不同单词在其输入中出现的次数
- C++为一串单词添加空格
- 在C++中查找(奇怪的)字符串中的单词
- 当字符串是某个单词时给出输出?
- 当您在此单词中搜索单词时调整字符数组的大小?
- 数每个单词的元音
- 我们如何在文本文件中找到C++中的几个单词?
- 使用 BFS 的单词梯 2
- 替换字符串中的单词,但忽略引号中的单词