【发布时间】:2021-12-29 18:13:33
【问题描述】:
我想创建一个可变大小的数组来存储最大长度为 40 的字符串。我进行了研究并找到了以下代码,它创建了一个动态整数数组。
typedef struct {
int *array;
size_t used;
size_t size;
} Array;
void initArray(Array *a, size_t initialSize) {
a->array = malloc(initialSize * sizeof(int));
a->used = 0;
a->size = initialSize;
}
void insertArray(Array *a, int element) {
// a->used is the number of used entries, because a->array[a->used++] updates a->used only *after* the array has been accessed.
// Therefore a->used can go up to a->size
if (a->used == a->size) {
a->size *= 2;
a->array = realloc(a->array, a->size * sizeof(int));
}
a->array[a->used++] = element;
}
void freeArray(Array *a) {
free(a->array);
a->array = NULL;
a->used = a->size = 0;
}
我目前正在尝试修改代码,使其能够解决我的问题。到目前为止,我想出了这个
typedef struct {
size_t used;
size_t size;
char *array[][40];
} Array;
void initArray(Array *a, size_t initialSize) {
a->array = malloc(initialSize * sizeof(char));
a->used = 0;
a->size = initialSize;
}
void insertArray(Array *a, char element) {
// a->used is the number of used entries, because a->array[a->used++] updates a->used only *after* the array has been accessed.
// Therefore a->used can go up to a->size
if (a->used == a->size) {
a->size *= 2;
a->array = realloc(a->array, a->size * sizeof(char));
}
strcpy(a->array[a->used++], element);
}
终于
Array a;
char srcname[40];
initArray(&a, 100);
insertArray(&a, srcname);
这会产生分段错误。 尽管我进行了研究,但我还没有设法制作一个有效的动态字符串数组。 任何指导将不胜感激
【问题讨论】:
-
char *array[][40]没有声明你认为它做了什么。这段代码不应该编译,更不用说在运行时产生分段错误了。 -
你可能应该有一个指向字符串的指针数组。代码可能会更简单一些,而且您可以存储任意长度的字符串。
标签: c multidimensional-array dynamic-memory-allocation c-strings function-definition