Array dinámico de cadenas en C.
Quiero crear un arreglo de tamaño variable que almacene cadenas de hasta un máximo de 40 caracteres. He investigado y encontrado el siguiente código, el cual crea un arreglo dinámico de enteros.
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 es el número de entradas utilizadas, ya que a->array[a->used++] actualiza a->used sólo *después de que se haya accedido al arreglo.
// Por lo tanto, a->used puede llegar hasta 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;
}
Actualmente estoy intentando modificar el código para que funcione para mi problema. Hasta ahora, he creado lo siguiente:
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 es el número de entradas utilizadas, ya que a->array[a->used++] actualiza a->used sólo *después de que se haya accedido al arreglo.
// Por lo tanto, a->used puede llegar hasta 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);
}
Finalmente:
Array a;
char srcname[40];
initArray(&a, 100);
insertArray(a, srcname);
Esto produce una falla de segmentación. Aunque he investigado, no he logrado crear un arreglo dinámico funcional de cadenas. Cualquier guía sería apreciada.
davy.ai
Puede intentar modificar el código de la siguiente manera:
Por último