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