arrays - c中动态长度/大小的char数组
问题描述
我正在尝试在 c 中创建具有动态长度/大小的动态字符数组(向量)。
这是我的尝试:
#include <stdio.h>
#include <stdlib.h>
void push_back(char **arr, char *element, int *counter) {
if (*counter > 0) {
arr = realloc(arr, *counter * sizeof(char *));
}
arr[*counter] = element;
(*counter)++;
}
int main() {
char **arr = malloc(1 * sizeof(char *));
int counter = 0;
push_back(arr, "element", &counter);
push_back(arr, "element2", &counter);
push_back(arr, "element3", &counter);
push_back(arr, "element4", &counter);
push_back(arr, "element5", &counter);
push_back(arr, "element6", &counter);
for (int i=0; i<counter; i++) {
printf("%s <-\n", (char *)arr[i]);
}
free(arr[i]);
return 0;
}
我从标准输出收到以下错误:
realloc(): invalid next size
Aborted
我究竟做错了什么?
解决方案
你需要三重指针***
(wrrrr .....)或者只是返回重新分配的指针。
char ** push_back(char **arr, char *element, int *counter) {
*counter += 1;
arr = realloc(arr, *counter * sizeof(char *));
arr[*counter - 1] = element;
return arr;
}
int main() {
char **arr = NULL;
int counter = 0;
arr = push_back(arr, "element", &counter);
arr = push_back(arr, "element2", &counter);
arr = push_back(arr, "element3", &counter);
arr = push_back(arr, "element4", &counter);
arr = push_back(arr, "element5", &counter);
arr = push_back(arr, "element6", &counter);
for (int i=0; i<counter; i++) {
printf("%s %d <-\n", arr[i], counter);
}
free(arr);
return 0;
}
您不需要 malloc 然后检查计数器的值。 https://godbolt.org/z/xnaxKo
PS Yuo 应该总是检查malloc
(和朋友)的结果。
推荐阅读
- typescript - 在未安装 @progress/kendo-ui 的情况下以正确方式导入 @types/kendo-ui
- indexing - 可以将 HASH 键更新为预先存在的 Dynamodb 全局二级索引的另一个属性吗?
- c++ - 如何将固定长度的 char* 转换为数字或将非空终止的 char* 转换为数字?
- python - 更新函数中的返回值
- javascript - 创建日历事件时返回奇怪的错误消息
- c# - Reading CSV with optional column using CsvHelper
- java - How to execute several sql-statements in one session with mybatis-string
- python - 对 MongodDB 中文档的几乎所有字段应用操作?
- excel - 对象失效的方法范围
- kubernetes - 将完整的应用程序放在一个 Kubernetes pod 中是否很好?