Inicializar Char Array em C

Jinku Hu 12 outubro 2023
  1. Use {} Notação de Lista Curly Braced para inicializar un array char em C
  2. Use Atribuição de String para inicializar um array char em C
  3. Use {{ }} colchetes dobrados para inicializar o array 2D char em C
Inicializar Char Array em C

Este artigo irá demonstrar vários métodos de como inicializar un array char em C.

Use {} Notação de Lista Curly Braced para inicializar un array char em C

Um array char é geralmente declarado como uma estrutura de tamanho fixo e freqüentemente inicializado imediatamente. A notação de lista com colchetes é um dos métodos disponíveis para inicializar o array char com valores constantes. É possível especificar apenas a parte dos elementos entre chaves, já que o restante dos caracteres é inicializado implicitamente com um valor de byte nulo. Pode ser útil se o array char precisar ser impresso como uma string de caracteres. Como há um caractere de byte nulo armazenado no final dos caracteres válidos, a função printf pode ser utilizada de forma eficiente com o especificador de string de formato %s para gerar o conteúdo do array.

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

void printCharArray(char *arr, size_t len) {
  printf("arr: ");
  for (int i = 0; i < len; ++i) {
    printf("%c, ", arr[i]);
  }
  printf("\n");
}

enum { LENGTH = 21, HEIGHT = 5 };

int main() {
  char c_arr[LENGTH] = {'a', 'b', 'c', 'd', 'e', 'f', 'g'};
  printCharArray(c_arr, LENGTH);

  exit(EXIT_SUCCESS);
}

Resultado:

arr: a, b, c, d, e, f, g, , , , , , , , , , , , , , ,

Use Atribuição de String para inicializar um array char em C

Outro método útil para inicializar um array char é atribuir um valor de string na instrução de declaração. O literal de string deve ter menos caracteres do que o comprimento do array; caso contrário, haverá apenas parte da string armazenada e nenhum caractere nulo de terminação no final do buffer. Portanto, se o usuário tentar imprimir o conteúdo do array com o especificador %s, ele poderá acessar a região da memória após o último caractere e provavelmente causará uma falha.

Observe que c_arr tem um comprimento de 21 caracteres e é inicializado com uma string longa de 20 char. Como resultado, o 21º caractere no array tem a garantia de ser \0 byte, tornando o conteúdo uma cadeia de caracteres válida.

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

void printCharArray(char *arr, size_t len) {
  printf("arr: ");
  for (size_t i = 0; i < len; ++i) {
    printf("%c, ", arr[i]);
  }
  printf("\n");
}

enum { LENGTH = 21, HEIGHT = 5 };

int main() {
  char c_arr[LENGTH] = "array initialization";
  char c_arr2[LENGTH] = "array initialization.f";
  printCharArray(c_arr, LENGTH);
  printCharArray(c_arr2, LENGTH);
  printf("%s\n", c_arr);
  printf("%s\n", c_arr2);

  exit(EXIT_SUCCESS);
}

Resultado:

arr: a, r, r, a, y,  , i, n, i, t, i, a, l, i, z, a, t, i, o, n,  ,
arr: a, r, r, a, y,  , i, n, i, t, i, a, l, i, z, a, t, i, o, n, .,
array initialization
array initialization.//garbage values//

Use {{ }} colchetes dobrados para inicializar o array 2D char em C

A lista entre chaves também pode ser utilizada para inicializar arrays char bidimensionais. Nesse caso, declaramos um array 5x5 char e incluímos cinco strings entre colchetes dentro das chaves externas. Observe que cada literal de string neste exemplo inicializa as linhas de cinco elementos do array. O conteúdo desta matriz bidimensional não pode ser impresso com o especificador %s, pois o comprimento de cada linha corresponde ao comprimento dos literais de string; portanto, não há byte nulo de terminação armazenado implicitamente durante a inicialização. Normalmente, o compilador avisará se os literais de string forem maiores do que as linhas do array.

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

enum { LENGTH = 5, HEIGHT = 5 };

int main() {
  char c_arr[HEIGHT][HEIGHT] = {
      {"hello"}, {"there"}, {"multi"}, {"dimen"}, {"sion."}};

  for (size_t i = 0; i < HEIGHT; ++i) {
    for (size_t j = 0; j < HEIGHT; ++j) {
      printf("%c, ", c_arr[i][j]);
    }
    printf("\n");
  }
  printf("\n");

  exit(EXIT_SUCCESS);
}

Resultado:

h, e, l, l, o,
t, h, e, r, e,
m, u, l, t, i,
d, i, m, e, n,
s, i, o, n, .,
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