我有以下代码(用定界符分割字符串)
void explode(const char *input, const char *delim)
{
char *local = strdup(input);
char *token;
while ((token = strtok_r(local, delim, &local))) {
puts(token);
}
}
我不想打印出字符串,而是希望将它们存储在数组数组中。我对更高级的概念有些陌生,几个小时来我就遇到了太多的段错误。在这个情况下,你会怎么做?
答案 0 :(得分:1)
您事先不知道数组的大小,因此应将其初始化为某个固定的合理大小(例如16?),并保留一个索引变量以指向数组中的下一个可用插槽以存储下一个变量。如果索引变量变得等于数组大小,则需要使用realloc
分配更多的内存并更新大小变量。继续重新分配,直到使用完字符串为止。这是一些伪代码:
size_t array_size = 16;
size_t index = 0;
char **arr = malloc(array_size * sizeof(char *));
while ((token = strtok_r(local, delim, &local))) {
if (index == array_size) {
array_size += 16;
arr = realloc(arr, array_size * sizeof *arr);
/* add error check */
}
arr[index++] = token;
}
您应该确保在完成分配后释放分配的内存。