in

¿Cómo creo una matriz de cadenas en C?

apple touch icon@2

Hay varias formas de crear una matriz de cadenas en C.Si todas las cadenas van a tener la misma longitud (o al menos la misma longitud máxima), simplemente declare una matriz bidimensional de caracteres y asigne según sea necesario:

char strs[NUMBER_OF_STRINGS][STRING_LENGTH+1];
...
strcpy(strs[0], aString); // where aString is either an array or pointer to char
strcpy(strs[1], "foo");

También puede agregar una lista de inicializadores:

char strs[NUMBER_OF_STRINGS][STRING_LENGTH+1] = {"foo", "bar", "bletch", ...};

Esto supone que el tamaño y la cantidad de cadenas en el inicializador coinciden con las dimensiones de su matriz. En este caso, el contenido de cada literal de cadena (que es en sí mismo una matriz de caracteres terminada en cero) se copia en la memoria asignada a strs. El problema con este enfoque es la posibilidad de fragmentación interna; si tiene 99 cadenas de 5 caracteres o menos, pero 1 cadena de 20 caracteres de longitud, 99 cadenas tendrán al menos 15 caracteres sin usar; eso es una pérdida de espacio.

En lugar de usar una matriz bidimensional de char, puede almacenar una matriz 1-d de punteros a char:

char *strs[NUMBER_OF_STRINGS];

Tenga en cuenta que en este caso, solo ha asignado memoria para contener los punteros a las cadenas; la memoria para las propias cadenas debe asignarse en otro lugar (ya sea como matrices estáticas o mediante el uso de malloc() o calloc()). Puede utilizar la lista de inicializadores como en el ejemplo anterior:

char *strs[NUMBER_OF_STRINGS] = {"foo", "bar", "bletch", ...};

En lugar de copiar el contenido de las constantes de cadena, simplemente está almacenando los punteros a ellas. Tenga en cuenta que es posible que las constantes de cadena no se puedan escribir; puedes reasignar el puntero, así:

strs[i] = "bar";
strs[i] = "foo"; 

Pero es posible que no pueda cambiar el contenido de la cadena; es decir,

strs[i] = "bar";
strcpy(strs[i], "foo");

puede no estar permitido.

Puedes usar malloc() para asignar dinámicamente el búfer para cada cadena y copiarlo en ese búfer:

strs[i] = malloc(strlen("foo") + 1);
strcpy(strs[i], "foo");

POR CIERTO,

char (*a[2])[14];

Declara a como una matriz de 2 elementos de punteros a matrices de 14 elementos de char.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

mapreduce algorithm

Hadoop – MapReduce

gfg 200x200 min

Python | Diferencia entre dos listas