Imprimir Char Array em C

Jinku Hu 12 outubro 2023
  1. Utilize o for Loop para imprimir um array de caracteres em C
  2. Utilizar printf com %s Especificador para imprimir Char Array em C
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
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

Artigo relacionado - C Array