Imprimir Char Array em C
- 
          
            Utilize o forLoop para imprimir um array de caracteres em C
- 
          
            Utilizar printfcom%sEspecificador 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