c - 分割一个字符串并存储在数组的数组中

标签 c arrays string pointers

我有以下代码(用分隔符分割字符串)

void explode(const char *input, const char *delim)
{
    char *local = strdup(input);

    char *token;

    while ((token = strtok_r(local, delim, &local))) {
        puts(token);
    }
}

我不想打印出字符串,而是希望将它们存储在数组的数组中。我对更高级的概念有点陌生,几个小时以来我遇到了太多的段错误。在这个情况下,你会怎么做?

最佳答案

您事先不知道数组的大小,因此您应该将其初始化为某个固定的合理大小(例如 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;
}

您应该确保在使用完分配的内存后释放它。

关于c - 分割一个字符串并存储在数组的数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52354433/

相关文章:

c - 打印多个值

c - C编译器中的类型转换

c - static 和 volatile 关键字的顺序重要吗?

c++ - 如何与数组 union 并保持可移植性?

c - 在c中获取日期和时间

c# - 在 C# 中将字节数组转换为字符串并再次返回

C——按位压缩和解压缩

c - 如何找到某个字母在句子中的位置? (C语言编程)

javascript - 来自 queryselectorall 和 addeventlistener 问题的数组

javascript - 字符串替换模块定义