int
main(int argc,char **argv){
for (argc--, argv++; argc > 0; argc -= argCount, argv += argCount) {
argCount = 1;
switch (argv[0][1]) {
case 'q':
testnum = atoi(argv[1]);
argCount++;
break;
default:
testnum = 1;
break;
}
}
//...............
我的问题是 argv[0][1] 是什么意思,for() 中的条件让我感到困惑,我的意思是 for (argc--, argv++; argc > 0; argc -= argCount, argv + = argCount)
//谢谢大家....**argv[0][1] 应该是 argv[0][1],那是我的错,不是代码编写者。
最佳答案
该代码看起来不正确。 **argv[0][1]
试图取消引用 char
.
argv[0][1]
会有意义,意思是“在 char
中取第一个 char*
的第二个 argv
。”恕我直言,代码正在尝试检测 -q
命令行标志(然后将 testnum
设置为下一个参数的 int
版本,盲目地假设它存在),但它跳过了对 -
的检查, 并盲目地假设它在那里,并且没有其他论点会有 q
作为第二个字符。
这段代码需要重构。这是一种方法:
int main(int argc, char **argv) {
int testnum = 1;
for (int argi = 1; argi < argc; ++argi) {
if(argv[argi][0] == '-') {
switch (argv[argi][1]) {
case 'q':
if(argi + 1 == argc || argv[argi + 1][0] == '-') {
/* Handle missing argument error. */
return 1;
}
testnum = atoi(argv[++argi]);
break;
default:
/* Handle unrecognized flag error. */
return 1;
}
}
else
{
/* Handle non-flag parameter. */
}
/* Continue with program. */
return 0;
}
关于c++ - 对此 argv 的使用感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12842207/