Imprimir un array de caracteres en C

Jinku Hu 12 octubre 2023
  1. Utiliza el bucle for para imprimir un array de caracteres en C
  2. Usar printf con el especificador %s para imprimir un array de caracteres en C
Imprimir un array de caracteres en C

Este artículo introducirá múltiples métodos sobre cómo imprimir un array de caracteres en C.

Utiliza el bucle for para imprimir un array de caracteres en C

El bucle for es la solución más obvia si queremos imprimir los elementos del array por separado y formatear la salida con más detalles. Un prerrequisito crítico para este método es que debemos conocer la longitud del array por adelantado.

Obsérvese que podemos utilizar otros métodos de iteración como el bucle while, pero entonces deberíamos conocer el valor en el que debería detenerse la iteración; de lo contrario, la iteración se saldría de los límites lanzando el fallo de segmentación.

En el siguiente ejemplo, demostramos el método de bucle for e iteramos precisamente 6 veces sobre el array de seis caracteres.

#include <stdio.h>
#include <stdlib.h>

#define STR(num) #num

int main(void) {
  char arr1[] = {'a', 'b', 'c', 'd', 'e', 'f'};

  printf(STR(arr1) ": ");
  for (int i = 0; i < 6; ++i) {
    printf("%c, ", arr1[i]);
  }
  printf("\b\b\n");

  exit(EXIT_SUCCESS);
}

Producción :

arr1: a, b, c, d, e, f

Usar printf con el especificador %s para imprimir un array de caracteres en C

La función printf es una poderosa función para la salida formateada. Puede manipular variables de entrada con especificadores de tipo y procesar las variables correspondientes.

En concreto, el array char tiene internamente la misma estructura que la cadena de estilo C, excepto que los caracteres de la cadena de estilo C siempre terminan con el byte \0 para denotar el punto final. Si añadimos el byte nulo al final de nuestro array char, podemos imprimir todo el array con una llamada a printf de una sola línea.

Si no se especifica el byte nulo de finalización y se llama a printf con este método, el programa puede intentar acceder a regiones de memoria, lo que probablemente dará lugar a un error de segmentación.

#include <stdio.h>
#include <stdlib.h>

#define STR(num) #num

int main(void) {
  char arr1[] = {'a', 'b', 'c', 'd', 'e', 'f'};
  char arr2[] = {'t', 'r', 'n', 'm', 'b', 'v', '\0'};

  printf("%s\n", arr1);
  printf("%s\n", arr2);

  exit(EXIT_SUCCESS);
}

Producción :

abcdeftrnmbv
trnmbv

Como puedes ver, cuando imprimimos el arr1 que no tiene el terminador nulo, obtendremos más caracteres hasta que la iteración llegue a un terminador nulo - \0.

Otro método para especializar la función printf es pasar el número de caracteres de la cadena dentro del especificador %s. Una forma de hacer esto es codificar estáticamente la longitud de la cadena con un entero entre los símbolos % y s, o se puede reemplazar con el símbolo * para tomar otro argumento entero de los parámetros de printf. Tenga en cuenta que ambos métodos incluyen el carácter . antes del número o asterisco en el especificador.

#include <stdio.h>
#include <stdlib.h>

#define STR(num) #num

int main(void) {
  char arr1[] = {'a', 'b', 'c', 'd', 'e', 'f'};
  char arr2[] = {'t', 'r', 'n', 'm', 'b', 'v', '\0'};

  printf("%.6s\n", arr1);
  printf("%.*s\n", (int)sizeof arr1, arr2);

  exit(EXIT_SUCCESS);
}

Producción :

abcdef
trnmbv
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