Inicializar Char Array em C
-
Use
{}
Notação de Lista Curly Braced para inicializar un arraychar
em C -
Use Atribuição de String para inicializar um array
char
em C -
Use
{{ }}
colchetes dobrados para inicializar o array 2Dchar
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, .,
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