Imprimir Char Array em C
-
Utilize o
for
Loop para imprimir um array de caracteres em C -
Utilizar
printf
com%s
Especificador para imprimir Char Array em C
Este artigo irá introduzir múltiplos métodos sobre como imprimir um array de caracteres em C.
Utilize o for
Loop para imprimir um array de caracteres em C
O laço for
é a solução mais óbvia se quisermos imprimir elementos de array separadamente e formatar a saída com mais detalhes. Um pré-requisito crítico para este método é que devemos conhecer o comprimento do array com antecedência.
Note-se que podemos utilizar outros métodos de iteração como o laço while
, mas depois devemos saber o valor a que a iteração deve parar; caso contrário, a iteração sairia dos limites, lançando a falha de segmentação.
No exemplo seguinte, demonstramos o método de cicli for
e iteramos precisamente 6 vezes ao longo do 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);
}
Resultado:
arr1: a, b, c, d, e, f
Utilizar printf
com %s
Especificador para imprimir Char Array em C
A função printf
é uma função poderosa para a saída formatada. Pode manipular variáveis de entrada com especificadores de tipo e variáveis de processo de forma correspondente.
Nomeadamente, a matriz char
internamente tem a mesma estrutura que a string estilo C, excepto que os caracteres da string estilo C terminam sempre com \0
byte para denotar o ponto final. Se adicionarmos o byte nulo no final do nosso char
, podemos imprimir todo o char
com uma única linha de chamada printf
.
Se o byte nulo terminante não for especificado e o printf
for chamado com este método, o programa pode tentar aceder a regiões de memória que muito provavelmente resultarão em erro de segmentação.
#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);
}
Resultado:
abcdeftrnmbv
trnmbv
Como pode ver, quando imprimimos o arr1
que não tem o terminador nulo, iremos obter mais caracteres até a iteração atingir um terminador nulo - \0
.
Outro método para especializar a função printf
é passar o número de caracteres na string dentro do especificador %s
. Uma forma de o fazer é codificar estaticamente o comprimento da string com um número inteiro entre os símbolos %
e s
, ou pode ser substituído pelo símbolo *
para retirar outro argumento inteiro dos parâmetros printf
. Note-se que ambos os métodos incluem .
caractere antes do número ou asterisco no 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);
}
Resultado:
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