Matriz de cadenas en C
- Usa la notación 2D para declarar un array de cadenas en C
-
Utilizar la notación de array
char*
para declarar arrays de cadenas en C
Este artículo demostrará múltiples métodos sobre cómo declarar un array de cadenas en C.
Usa la notación 2D para declarar un array de cadenas en C
Las cadenas en C son simplemente una secuencia de cadenas
almacenadas en una región de memoria contigua. Una distinción sobre las cadenas de caracteres es que hay un byte nulo de terminación \0
almacenado al final de la secuencia, denotando el final de una cadena. Si declaramos un array fija de char
utilizando la notación []
, entonces podemos almacenar una cadena que consista en el mismo número de caracteres en esa ubicación.
Hay que tener en cuenta que al copiar la cadena de caracteres en la ubicación del array hay que tener en cuenta un espacio extra para el byte nulo de terminación. Por lo tanto, se puede declarar un array bidimensional char
con notación de paréntesis y utilizarlo como array de cadenas. La segunda dimensión del array limitará la longitud máxima de la cadena. En este caso, definimos arbitrariamente una macro constante - MAX_LENGTH
igual a 100 caracteres. Toda el array puede ser inicializada con la notación {""}
, que pone a cero cada elemento char
del array. Cuando se almacenan los valores de las cadenas en el array ya inicializada, no se permite el operador de asignación, y se deben emplear funciones especiales de copia de memoria como strcpy
.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LENGTH 100
#define NUM_STRINGS 10
int main() {
char arr[NUM_STRINGS][MAX_LENGTH] = {""};
arr2[0] = "string literal"; // Not permitted
strcpy(arr[0], "hello world");
printf("%s\n", arr[0]);
printf("%s\n", strcpy(arr[0], "hello world"));
exit(EXIT_SUCCESS);
}
Producción :
hello world
hello world
Alternativamente, podemos inicializar el array bidimensional char
instantáneamente cuando se declara. El moderno estándar C11 permite inicializar los Arrays char
con literales de cadena e incluso almacenar el byte nulo al final de la cadena automáticamente cuando la longitud del array es mayor que la propia cadena. La notación de la lista inicializadora es similar a la sintaxis de C++. Se supone que cada elemento con corchetes se almacena en una región de memoria consecutiva de longitud MAX_LENGTH
. En caso de que la notación del inicializador especifique menos elementos que el tamaño del array, los elementos restantes se inicializan implícitamente con \0
bytes.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LENGTH 100
#define NUM_STRINGS 10
int main() {
char arr2[NUM_STRINGS][MAX_LENGTH] = {{"first string"},
{"second string"},
{"third string"},
{"fourth string"},
{"fifth string"}};
for (int i = 0; i < NUM_STRINGS; ++i) {
printf("%s, ", arr2[i]);
}
exit(EXIT_SUCCESS);
}
Producción :
first string, second string, third string, fourth string, fifth string, , , , , ,
Utilizar la notación de array char*
para declarar arrays de cadenas en C
char*
es el tipo que se utiliza generalmente para almacenar cadenas de caracteres. Declarar el array de char*
nos da el número fijo de punteros que apuntan al mismo número de cadenas de caracteres. Puede ser inicializado con literales de cadena como se muestra en el siguiente ejemplo, asignado o copiado usando funciones especiales proporcionadas en la cabecera string.h
.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LENGTH 100
#define NUM_STRINGS 10
int main() {
char* arr3[NUM_STRINGS] = {"first string", "second string", "third string",
"fourth string", "fifth string"};
char* str1 = "string literal";
arr3[8] = str1;
arr3[9] = "hello there";
for (int i = 0; i < NUM_STRINGS; ++i) {
printf("%s, ", arr3[i]);
}
printf("\n");
exit(EXIT_SUCCESS);
}
Producción :
first string, second string, third string, fourth string, fifth string, (null), (null), (null), string literal, hello there,
Como alternativa, se pueden especificar sólo las llaves {}
, lo que inicializará los punteros del array a null
, y podrán ser utilizados posteriormente para almacenar otras direcciones de cadenas, o incluso el programador puede asignar memoria dinámica.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define NUM_STRINGS 10
int main() {
char *arr4[NUM_STRINGS] = {};
for (int i = 0; i < NUM_STRINGS; ++i) {
printf("%s, ", arr4[i]);
}
printf("\n");
exit(EXIT_SUCCESS);
}
Producción :
(null), (null), (null), (null), (null), (null), (null), (null), (null), (null),
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn FacebookArtículo relacionado - C Array
- Asignar dinámicamente un array en C
- Copiar Char Array en C
- Borrar un array de caracteres en C
- Imprimir un array de caracteres en C
- Inicializar un array de caracteres en C