gpt4 book ai didi

C 命令行参数,分词

转载 作者:太空宇宙 更新时间:2023-11-04 04:44:18 26 4
gpt4 key购买 nike

我正在尝试编写一个函数来将命令行参数解析为一个 vector 。问题是我似乎无法消除使用全局指针数组作为 vector 。

代码是:

/** 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 命令行参数,分词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22781217/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com