【问题标题】:Iterating through a pointer to pointers [duplicate]遍历指向指针的指针[重复]
【发布时间】:2016-03-27 21:36:48
【问题描述】:

如果我有 char **args 我如何循环遍历数组的 以确定有多少?

比如char **args == {"one", "two", "three"},如何循环遍历每个元素,保持计数,然后返回3?

【问题讨论】:

    标签: c loops pointers multidimensional-array


    【解决方案1】:

    由于您的 args 是空终止的,因此只需编写

    int i;
    for (i = 0; args[i]; i++)
        // do something
    

    【讨论】:

      【解决方案2】:

      您可以在编译时获取大小,如下所示。

      这是遍历字符串数组的一种方法。

      char* args[] = {"one", "two", "three"};
      
      char** p = args;
      
      size_t len = sizeof(args) / sizeof(*args);
      
      for (int i = 0; i < len; ++i) {
          printf("item %u = %s\n", i,  *p++);
      }
      

      [编辑]

      我误会了,看来你的意思是命令行上的 args(以 null 结尾);

      在这种情况下你可以使用:

      int main(int argc, char** argv) {
          char** p = argv;
          int count = 0;
          while (*p)
              printf("item %u = %s\n", count++, *p++);
      }
      

      甚至

      int main(int argc, char** argv) {
          int count = 0;
          while (*argv)
              printf("item %u = %s\n", count++, *argv++);
      }
      

      请注意,您将在上述情况下打印 argv[0]。适应您的需求。

      当然,在这种情况下,你也有 argc,所以你可以迭代直到 i

      【讨论】:

      • 请注意,这只适用于指针数组,不适用于指向指针的指针。
      【解决方案3】:

      试试下面的代码:

      int count=0;
      while(*args++)count++;
      
      printf(" %d\n",count);
      

      while循环应该在到达字符串数组的末尾时终止,但是最好有:

      char strAry[M][N]="…your initialization…";
      **args;
      
      args=strAry;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-27
        • 2021-11-23
        • 2021-05-29
        • 2015-08-12
        相关资源
        最近更新 更多