Inicializar un array de caracteres en C
-
Utilizar la notación de lista con llaves para inicializar un array
char
en C -
Utilizar la asignación de cadenas para inicializar un array
char
en C -
Usar
{ }}
Doble Raya para Inicializar un Array 2Dchar
en C
Este artículo mostrará varios métodos para inicializar un array char
en C.
Utilizar la notación de lista con llaves para inicializar un array char
en C
Un array char
se declara generalmente como una estructura de tamaño fijo y a menudo se inicializa inmediatamente. La notación de lista con llaves es uno de los métodos disponibles para inicializar el array char
con valores constantes. Es posible especificar sólo la parte de los elementos en las llaves, ya que el resto de los chars se inicializa implícitamente con un valor de byte nulo. Puede ser útil si el array char
necesita ser impreso como una cadena de caracteres. Dado que hay un carácter de byte nulo garantizado para ser almacenado al final de los caracteres válidos, entonces la función printf
puede ser utilizada eficientemente con el especificador de cadena de formato %s
para imprimir el contenido del array.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void printCharArray(char *arr, size_t len) {
printf("arr: ");
for (int i = 0; i < len; ++i) {
printf("%c, ", arr[i]);
}
printf("\n");
}
enum { LENGTH = 21, HEIGHT = 5 };
int main() {
char c_arr[LENGTH] = {'a', 'b', 'c', 'd', 'e', 'f', 'g'};
printCharArray(c_arr, LENGTH);
exit(EXIT_SUCCESS);
}
Producción :
arr: a, b, c, d, e, f, g, , , , , , , , , , , , , , ,
Utilizar la asignación de cadenas para inicializar un array char
en C
Otro método útil para inicializar un array char
es asignar un valor de cadena en la declaración. El literal de la cadena debe tener menos caracteres que la longitud del array; de lo contrario, sólo habrá una parte de la cadena almacenada y no habrá un carácter nulo de terminación al final del buffer. Por lo tanto, si el usuario intenta imprimir el contenido del array con el especificador %s
, podría acceder a la región de memoria después del último carácter y probablemente lanzará un fallo.
Tenga en cuenta que c_arr
tiene una longitud de 21 caracteres y se inicializa con una cadena de 20 char
. Como resultado, se garantiza que el 21º carácter del array es el 0
byte, haciendo que el contenido sea una cadena de caracteres válida.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void printCharArray(char *arr, size_t len) {
printf("arr: ");
for (size_t i = 0; i < len; ++i) {
printf("%c, ", arr[i]);
}
printf("\n");
}
enum { LENGTH = 21, HEIGHT = 5 };
int main() {
char c_arr[LENGTH] = "array initialization";
char c_arr2[LENGTH] = "array initialization.f";
printCharArray(c_arr, LENGTH);
printCharArray(c_arr2, LENGTH);
printf("%s\n", c_arr);
printf("%s\n", c_arr2);
exit(EXIT_SUCCESS);
}
Producción :
arr: a, r, r, a, y, , i, n, i, t, i, a, l, i, z, a, t, i, o, n, ,
arr: a, r, r, a, y, , i, n, i, t, i, a, l, i, z, a, t, i, o, n, .,
array initialization
array initialization.//garbage values//
Usar { }}
Doble Raya para Inicializar un Array 2D char
en C
La lista con llaves también puede utilizarse para inicializar matrices char
bidimensionales. En este caso, declaramos un array char
de 5x5 e incluimos cinco cadenas con llaves dentro de las llaves exteriores. Observe que cada literal de cadena en este ejemplo inicializa las filas de cinco elementos del array. El contenido de esta matriz bidimensional no puede imprimirse con el especificador %s
ya que la longitud de cada fila coincide con la longitud de los literales de cadena; por lo tanto, no hay ningún byte nulo de terminación almacenado implícitamente durante la inicialización. Normalmente, el compilador avisará si los literales de cadena son mayores que las filas del array.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
enum { LENGTH = 5, HEIGHT = 5 };
int main() {
char c_arr[HEIGHT][HEIGHT] = {
{"hello"}, {"there"}, {"multi"}, {"dimen"}, {"sion."}};
for (size_t i = 0; i < HEIGHT; ++i) {
for (size_t j = 0; j < HEIGHT; ++j) {
printf("%c, ", c_arr[i][j]);
}
printf("\n");
}
printf("\n");
exit(EXIT_SUCCESS);
}
Producción :
h, e, l, l, o,
t, h, e, r, e,
m, u, l, t, i,
d, i, m, e, n,
s, i, o, n, .,
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 Facebook