在 C 中实现 Split 函数,重新分配没有效果
Implementation of Split function in C, reallocation doesn't have effect
我尝试实现一个拆分函数来拆分带有字符的字符串,如 java。但是我的函数需要将拆分后的字符串存储在具有 2 个维度的选项卡中(选项卡在参数中)。我的函数需要 return 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;
}
当我尝试用 "ls | ls" 之类的 2 arg 拆分字符串时出现分段错误,第一个 ls 在选项卡中存货很好,但对于第二个,我们在 strdup(分割部分)。
我希望你能理解我的英语,我不是很擅长。
谢谢
编辑:我忘了我用 :
调用函数
char ** cmd_membres = NULL;
split(&cmd_membres, "|", chaine);
您 运行 遇到了优先错误; *parsedCommand[argc]
被解释为 *(parsedCommand[argc])
而不是您想要的 (*parsedCommand)[argc]
.
我尝试实现一个拆分函数来拆分带有字符的字符串,如 java。但是我的函数需要将拆分后的字符串存储在具有 2 个维度的选项卡中(选项卡在参数中)。我的函数需要 return 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;
}
当我尝试用 "ls | ls" 之类的 2 arg 拆分字符串时出现分段错误,第一个 ls 在选项卡中存货很好,但对于第二个,我们在 strdup(分割部分)。
我希望你能理解我的英语,我不是很擅长。 谢谢
编辑:我忘了我用 :
调用函数char ** cmd_membres = NULL;
split(&cmd_membres, "|", chaine);
您 运行 遇到了优先错误; *parsedCommand[argc]
被解释为 *(parsedCommand[argc])
而不是您想要的 (*parsedCommand)[argc]
.