c - 带有 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 行时,我得到了完整的单词
解决方案
您的总体想法是正确的,但您有一些细节错误。
在分配分配时,您不应该间接通过指针。
您需要strlen()
在分配时添加 1,以允许 foom 用于尾随 null。
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++;
推荐阅读
- javascript - 如何使用 slotduration 和 slotLabelInterval 中的自定义设置在 Fullcalendar 中突出显示周末
- java - 运行 docker 映像时出现 FileNotFoundException
- ruby-on-rails - @coffee_hour = Plan.find_by_event(:coffee_hour) ...是否可以使用这样的变量进行链接?
- python - 我想要过滤使用的 re.fucntion 或 pandas
- flutter - ButtonBar 处理行溢出?
- git - 持续的 GitHub 推送和贡献
- javascript - 为什么我在Javascript中使用推送功能时颜色会不断变化
- c - 在 Cooja 中获取 RPL 的首选路径和首选路径的所有节点
- python - 通过 TCP 以太网发送 h5 文件
- compiler-construction - 我们能否为 LLVM RISC-V 后端提供自定义指令成本模型?