Imprimir un array de caracteres en C
-
Utiliza el bucle
for
para imprimir un array de caracteres en C -
Usar
printf
con el especificador%s
para 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
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