c++ - 对此 argv 的使用感到困惑

标签 c++ argv

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/

相关文章:

C.pathconf 出错。路径为空

PHP 命令行界面 : remove last element from ARGV

c++ - 在哪种情况下 if(a=b) 是个好主意?

c++ - Qt - QLabel 上的鼠标事件

c++ - 比赛在哪里?

C 字符串变为空

c++ - 我在 QT creator : Could not find qmake configuration file linux-g++-64 中有这个错误

c++ - 如何记住监控应用程序所在的位置?

c - 如何将命令行参数读入 C 中的双数组/vector ?

不能比较argv?