除非您的任务只是处理参数的处理,否则您可能需要查找getopt
- 它是参数的标准库解析器。
至于您的问题的实质,有很多选择,您可以将sscanf
其用作其中的一部分,但您不必这样做。
要解析您提到的一个参数,您需要执行以下操作:检查参数是否以 -i 开头,从参数中获取数据。
检查参数是否以 -i 开头的最简单方法是:
if (argv[1][0] == '-' && argv[1][1] == 'i')
或者,如果你有很多参数选项,都以'-'开头,你可能想要这样的东西:
char * i = NULL;
char * o = NULL;
char * s = NULL;
for (int i = 1; i < argc; ++i) {
if (argv[i][0] == '-') {
switch(argv[i][1]) {
case 'i':
i = argv[i][2];
break;
case 's':
s = argv[i][2];
break;
case 'o':
o = argv[i][2];
break;
default:
cerr << "Unknown option: " << argv[i][1];
}
} else {
cerr << "Error: all options must begin with '-'";
}
请注意,我使用的是 argv[ 1 ],而不是 0。argv[0] 始终是可执行文件的名称。
提取其余参数的最快方法是简单的指针运算:
char * filename = argv[1] + 2; // (Or you could equivalently say = &argv[1][2]
这是最有效的——它重用了 argv 中已经存在的字符串。如果您打算更改字符串,最好使用 strcpy:
char * filename = (char *)malloc(strlen(argv[1]) - 2);
strcpy(filename, argv1 + 2);
// and eventually you'd have to free(filename)...
玩转所有字符串函数并进行试验。您会发现它们对您以后的所有程序都是必不可少的。