1.软文推荐

2.软文推荐

3.软文推荐

Boost库中默认自带了一个功能强大的命令行参数解析器,以往我都是自己实现参数解析的,今天偶尔发现这个好东西,就来总结一下参数解析的基本用法,该库需要引入program_options.hpp头文件,即可使用了

第一次尝试
#include
#include

// 定义命名空间
namespace opt = boost::program_options;

int main(int argc, char const *argv[])
{
opt::options_description desc("Usage: 32位端口快速扫描器

 options: 
");

desc.add_options()
 ("Address,a", opt::value()->default_value("127.0.0.1"), "输入一个IP地址"),
 ("StartPort,s", opt::value()->default_value(1024), "传入扫描起始端口"),
 ("EndPort,e", opt::value()->default_value(65535), "传入扫描结束端口"),
 ("Help,h""弹出帮助菜单");

// 解析参数将值传递给virtual_map
opt::variables_map virtual_map;

try
{
 opt::store(opt::parse_command_line(argc, argv, desc), virtual_map);
}
catch (...)
{
 std::cout "error 
";
 return 0;
}

// 参数解析完毕,处理
if (virtual_map.count("Help"))
{
 printf("帮助");
}
if (virtual_map.count("Address"))
{
 std::cout "找到" "Address"].as() if (virtual_map.empty())
{
 std::cout "no options
";
}
return 0;
}
第二次尝试
#include  
#include  
#include
#include  

namespace opt = boost::program_options;

int main(int argc, char const *argv[])
{
int start_port = 1024, end_port = 65535;
std::vector address;

opt::options_description opt("
Usage: 32位端口快速扫描器 Ver:1.0 

 options: 
");
opt.add_options()
 ("address,a", opt::value >()->multitoken(), "指定地址")
 ("start_port,s", opt::value(&start_port)->default_value(1024), "开始端口")
 ("end_port,e", opt::value(&end_port)->default_value(65535), "结束端口")
 ("help""帮助菜单");

opt::variables_map vm;
try
{
 opt::store(parse_command_line(argc, argv, opt), vm);
}
catch (...){
 std::cout "command error!
";
 return 0;
}

opt::notify(vm);
if (vm.count("help"))
{
 std::cout return 0;
}
if (vm.count("address") && vm.count("start_port") && vm.count("end_port"))
{
 //遍历选项值  
 for (auto& str : vm["address"].as >())
  std::cout " ";
 int x = vm["start_port"].as();
 std::cout return 0;
}
最终版
#include
#include

namespace opt = boost::program_options;

int main(int argc, char const *argv[])
{
opt::options_description des_cmd("
 Usage: 32位端口快速扫描器 Ver:1.0 

 Options: 
");
des_cmd.add_options()
 ("address,a", opt::value()->default_value("127.0.0.1"), "指定地址")
 ("start_port,s", opt::value()->default_value(1024), "开始端口")
 ("end_port,e", opt::value()->default_value(65535), "结束端口")
 ("help,h""帮助菜单");

opt::variables_map virtual_map;
try
{
 opt::store(opt::parse_command_line(argc, argv, des_cmd), virtual_map);
}
catch (...){ return 0; }

// 定义消息
opt::notify(virtual_map);

// 无参数直接返回
if (virtual_map.empty())
{
 return 0;
}
else if (virtual_map.count("help") || virtual_map.count("h"))
{
 std::cout return 0;
}
else if (virtual_map.count("address") && virtual_map.count("start_port") && virtual_map.count("end_port"))
{
 std::cout "Addr = " "address"].as() "StartPort = " "start_port"].as() "EndPort = " "end_port"].as() else
{
 std::cout "option error" return 0;
}

命令行下使用help输出帮助菜单,当传入三个参数时,即可解析到第二个判断上,执行相应的函数即可。

本文来源:www.lxlinux.net/9352.html,若引用不当,请联系修改。

相关文章 8

1

Linux scp使用实例 2分钟前

scp是secure copy的简写,用于在Linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨服务器,而且scp传输是...

2

腾讯云存储教程(腾讯云存储产品) 3分钟前

目录:1、微信小程序 怎么使用 腾讯云存储2、腾讯云储存产品是什么/腾讯云储存储存空间是多大/腾讯云储存怎么上传文件?3、关于腾讯云...

3

通过Magent部署Memcached集群 5分钟前

Magent 是一款开源的 Memcached 代理服务器软件,使用它可以搭建高可用性的集群应用的 Memcached 服务 ,备份 Memcached 数据 尽管 Memcached 服务挂掉...

4

阿里云云桌面购买(阿里云桌面版) 5分钟前

目录:1、新手用户如何购买阿里云服务器?图文教程手把手教你2、阿里云服务器购买之后怎么做3、阿里云电脑怎么买4、怎么购买阿里云产...

5

性能提升8450%,Linux内核函数获大幅改进 7分钟前

Jason Donenfeld 是 WireGuard 的主要开发者,同时他也是 Linux 内核随机数相关代码的维护者,近日在他的领导下,Linux 内核的随机数生成器代码有...

6

Linux系统更改swappiness 10分钟前

Swappiness是Linux内核属性,其主要作用就是从物理内存换出页面到交换空间与从页面缓存中删除页面之间的平衡。它基本上定义了系统多久使...

7

便宜韩国vps推荐(韩国vps怎么使用) 12分钟前

目录:1、哪里的韩国vps比较好,要速度快的稳定的,最好重装系统是免费的2、哪款海外 VPS 性价比高3、便宜的国内vps4、韩国vps多少钱一年...

8

C++ 中 inline 使用详解 14分钟前

inline是C++关键字,在函数声明或定义中,函数返回类型前加上关键字inline,即可以把函数指定为内联函数。 引入 inline 关键字的原因 在 c/...