Inicializar un array de caracteres en C

Jinku Hu 12 octubre 2023
  1. Utilizar la notación de lista con llaves para inicializar un array char en C
  2. Utilizar la asignación de cadenas para inicializar un array char en C
  3. Usar { }} Doble Raya para Inicializar un Array 2D char en C
Inicializar un array de caracteres 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, .,
Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

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

Artículo relacionado - C Array