我正在尝试编写一个函数来解析命令行参数到向量中。问题是我似乎无法消除使用全局指针数组作为向量。
代码是:
/** 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);
}
任何帮助将不胜感激
答案 0 :(得分:0)
我认为你在一个功能中做得太多了。您应该一方面分离解析任务(只是隔离原始字符串的子串,即发现起始和结束索引),另一方面将字符串添加到列表中。要替换2D数组,可以使用链接列表。但解析代码不应该担心这一点,只需扫描下一个分隔符。从起始位置减去结束位置以获得长度,并调用append_string_to_list()
函数,传递完整的源字符串以及起始索引和长度。
顺便说一下,你引用这个数组
char vects[8][32] = {0};
作为“全局指针数组”。它不是一个指针数组。它是一个字符数组的数组。可以肯定的是,如果您使用数组的 slice ,通过不指定第二个索引,那么它将工作,好像它是一个指针 - 它会衰减到函数调用中的指针 - 但真正的指针数组看起来像这样:
char *vects[8];