我尝试实现一个拆分函数来像在 Java 中那样使用caracter拆分字符串。但是我的函数需要在具有 2 个维度的选项卡中存储拆分的字符串(选项卡在参数中)。我的函数需要返回 arg 的数字。
所以我在我的函数中传递了一个 char ** 的地址,我想重新分配这个 char ** 但它不起作用。
int split(char*** parsedCommand,const char* splitCaracter,const char* myString) {
char* splittedPart = "";
char* copyOfmyString = NULL;
int argc = 0;
copyOfmyString = strdup(myString);
splittedPart = strtok(copyOfmyString, splitCaracter);
while(splittedPart != NULL)
{
*parsedCommand = (char**) realloc(*parsedCommand, sizeof(char*)*(argc+1));
if (*parsedCommand == NULL)
{
printf("fatalError ");
exit(-1);
}
(*parsedCommand)[argc] = strdup(splittedPart);
if ((*parsedCommand)[argc] == NULL)
{
printf("fatalError ");
exit(-1);
}
splittedPart = strtok (NULL, splitCaracter);
argc++;
}
free(copyOfmyString);
return argc;
}
当我尝试拆分带有 2 个参数的字符串时,我遇到了分段错误,例如"ls |ls",第一个 ls 在选项卡中库存良好,但对于第二个,我们在 strdup(splittedPart) 处进行了分割
。我希望你理解我的英语,我不太擅长。感谢。
编辑:我忘了我用:
char ** cmd_membres = NULL;
split(&cmd_membres, "|", chaine);
您遇到了优先错误; *parsedCommand[argc]
被解释为*(parsedCommand[argc])
而不是您想要的样子,(*parsedCommand)[argc]
.