我尝试实现一个split函数来拆分一个像java一样的字符串。但是我的函数需要在带有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个arg分割字符串时,我遇到了分段错误,例如" ls | ls",第一个ls在选项卡中表现良好,但是对于第二个ls,我们在strdup(splittedPart)处获得了分段错误。
我希望你理解我的英语,我并不擅长英语。 THX。
编辑:我忘记了我用以下函数调用该函数:char ** cmd_membres = NULL;
split(&cmd_membres, "|", chaine);
答案 0 :(得分:2)
您遇到了优先级错误; *parsedCommand[argc]
被解释为*(parsedCommand[argc])
,而不是您想要的内容(*parsedCommand)[argc]
。