应用程序的带参数运行,如:
int main(int argc, char* argv[])
{
return 0;
}
其中argc是传入参数的个数,argv是一个指向二维数组的指针,传入的是我们命令行中输入的参数,如程序执行命令:
yu@ubuntu:~/projects/FishTars/bin/x64/Debug$./a.out aa bb cc
这时,argc=3, argv指向存储aa、bb、cc三个char[]型二维数组的首地址。
本文使用Tars框架的TC_Option类对命令行参数进行解析,
测试代码如下:
#pragma once
#include "../../tars/util/include/tc_option.h"
#include "../../tars/util/include/tc_common.h"
#include <iterator>
#include <iostream>
#include <sys/time.h>
using namespace tars;
using namespace std;
namespace lesliefishtest
{
class TestOption
{
public:
static void test(int argc, char *argv[])
{
try
{
// 支持以下形式的参数: ./main.exe --name=value --with abc def
TC_Option op;
// 解析参数
op.decode(argc, argv);
// mp中存放标识和其对应参数的对应关系,例如:对于--name=value,存放name和value
map<string, string> mp = op.getMulti();
cout << "map:" << endl;
cout << TC_Common::tostr(mp) << endl;
// 解析单个的参数,如 abc def
vector<string> d = op.getSingle();
cout << "vector:" << endl;
cout << TC_Common::tostr(d) << endl;
// 通过key 获取 value
cout << "key abc's value is : " << op.getValue("abc") << endl;
}
catch (exception &ex)
{
cout << ex.what() << endl;
}
}
};
}
命令行输入
yu@ubuntu:~/projects/FishTars/bin/x64/Debug$ ./FishTars.out --abc=lesliefish it is a nice day --cde=yu
执行结果如下:
map:
[abc]=[lesliefish] [cde]=[yu]
vector:
it is a nice day
key abc's value is : lesliefish
实践环境:vs2017+ubuntu14.04
代码路径:
https://github.com/lesliefish/FishTars/blob/master/code/FishTars/test/utiltest/test_option.h