我正试图将一个函数编写成一个向量来解析命令行参数。问题是,我似乎无法消除使用指针的全局数组作为向量的情况。
代码是:

/** parse command line arguments into a global vector */
char vects[8][32] = {0};

int str_tokenizer(const char str[], char delim)
{
   extern char vects[8][32];
   int i,num_delim=0, num_vects;
   int str_len=strlen(str);

   for(i=0;i<str_len;i++)
   {
      if(str[i]==delim)
      num_delim++;
   }

   num_vects=num_delim+1;

   int x=0;
   vects[num_vects][32];
   for(i=0;i<num_vects;i++)
   {
      //printf("%i", i);
      int y=0;
      while(str[x]!=delim && str[x]!='\0')
      {
         //printf("%c", str[x]);
         vects[i][y++]=str[x++];
      }
      vects[i][y]='\0';
      x++;
   }
   return (num_vects);
}

任何帮助都将不胜感激

最佳答案

我觉得你在一个功能上做得太多了。一方面,您应该分离解析(只是分离原始字符串的子字符串,即发现开始和结束索引)的任务,另一方面,您应该将字符串添加到列表中。要替换二维数组,可以使用链接列表。但是解析代码不必担心这个问题,只需扫描下一个分隔符即可。从起始位置减去结束位置得到长度,然后调用append_string_to_list()函数,传递完整的源字符串以及起始索引和长度。
顺便说一下,你指的是这个数组

char vects[8][32] = {0};

作为“指针的全局数组”。它不是指针数组。它是一个字符数组。当然,如果使用数组的一个片段,而不指定第二个索引,那么它的工作方式就好像它是一个指针——它将在函数调用中衰减为一个指针——但真正的指针数组将如下所示:
char *vects[8];

关于c - C命令行参数,标记化,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22781217/

10-12 21:21