首页 > 解决方案 > 带有 realloc 的参差不齐的 *char 2d 数组

问题描述

我想知道如何在 c 中创建一个 ragget 2d string(char*)array。(我的示例代码如下所示)

    int j = 1;
    char **array = null;
   ... read string...
   *array = (char *) realloc(sizeof(char *) * j);
   j++;
(sirAvertisment[j] = (char **) realloc((*sirAvertisment)[j],sizeof(char *) * strlen(somearray[i]))

例如我想要它

  1. 阿尔法贝
  2. 苹果
  3. 孩子
  4. 信号量

但是有了指针,所以当我读取矩阵的 1 行时,我得到了完整的单词

标签: cpointersmatrixragged

解决方案


您的总体想法是正确的,但您有一些细节错误。

在分配分配时,您不应该间接通过指针。

您需要strlen()在分配时添加 1,以允许 foom 用于尾随 null。

您不应该转换 realloc 的结果。

realloc()在重新分配原始指针之前,您应该检查是否成功。

malloc()在为添加到数组的新元素分配内存时使用;realloc()仅应在指针已初始化时使用。

char **array = null;
...
char **new_array = realloc(array, sizeof(char *) * j);
if (!new_array) {
    printf("Allocation failed!\n");
    exit(1);
}
array = new_array;
array[j] = malloc(strlen(somearray[i]) + 1);
strcpy(array[j], somearray[i]);
j++;


推荐阅读