Array de Strings em C
- Use a notação de array 2D para declarar um array de strings em C
-
Use a notação de array
char*
para declarar o array de strings em C
Este artigo demonstrará vários métodos sobre como declarar un array de strings em C.
Use a notação de array 2D para declarar um array de strings em C
Strings em C são simplesmente uma sequência de chars
armazenada em uma região de memória contígua. Uma distinção sobre cadeias de caracteres é que há um byte nulo de terminação \0
armazenado no final da sequência, denotando o final de uma cadeia. Se declararmos um array fixo de char
usando a notação []
, então podemos armazenar uma string consistindo do mesmo número de caracteres naquele local.
Observe que um espaço de caractere extra para o byte nulo de terminação deve ser considerado ao copiar a sequência de caracteres para o local do array. Assim, pode-se declarar um array char
bidimensional com notação de colchetes e utilizá-lo como o array de strings. A segunda dimensão do array limitará o comprimento máximo da string. Nesse caso, definimos arbitrariamente uma constante de macro - MAX_LENGTH
igual a 100 caracteres. A matriz inteira pode ser inicializada com a notação {""}
, que zera cada elemento char
no array. Ao armazenar os valores da string no array já inicializado, o operador de atribuição não é permitido e funções especiais de cópia de memória devem ser empregadas como strcpy
.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LENGTH 100
#define NUM_STRINGS 10
int main() {
char arr[NUM_STRINGS][MAX_LENGTH] = {""};
arr2[0] = "string literal"; // Not permitted
strcpy(arr[0], "hello world");
printf("%s\n", arr[0]);
printf("%s\n", strcpy(arr[0], "hello world"));
exit(EXIT_SUCCESS);
}
Resultado:
hello world
hello world
Alternativamente, podemos inicializar o array bidimensional char
instantaneamente quando declarado. O padrão C11 moderno permite inicializar arrays char
com strings literais e até armazenar byte nulo no final da string automaticamente quando o comprimento do array é maior do que a própria string. A notação da lista do inicializador é semelhante à sintaxe C++. Cada elemento entre chaves deve ser armazenado em uma região de memória consecutiva de comprimento MAX_LENGTH
. No caso de a notação do inicializador especificar menos elementos do que o tamanho do array, os elementos restantes são inicializados implicitamente com \0
bytes.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LENGTH 100
#define NUM_STRINGS 10
int main() {
char arr2[NUM_STRINGS][MAX_LENGTH] = {{"first string"},
{"second string"},
{"third string"},
{"fourth string"},
{"fifth string"}};
for (int i = 0; i < NUM_STRINGS; ++i) {
printf("%s, ", arr2[i]);
}
exit(EXIT_SUCCESS);
}
Resultado:
first string, second string, third string, fourth string, fifth string, , , , , ,
Use a notação de array char*
para declarar o array de strings em C
char*
é o tipo geralmente usado para armazenar cadeias de caracteres. Declarar o array de char*
nos dá o número fixo de ponteiros apontando para o mesmo número de cadeias de caracteres. Ele pode ser inicializado com literais de string conforme mostrado no exemplo a seguir, atribuído ou copiado usando funções especiais fornecidas no cabeçalho string.h
.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LENGTH 100
#define NUM_STRINGS 10
int main() {
char* arr3[NUM_STRINGS] = {"first string", "second string", "third string",
"fourth string", "fifth string"};
char* str1 = "string literal";
arr3[8] = str1;
arr3[9] = "hello there";
for (int i = 0; i < NUM_STRINGS; ++i) {
printf("%s, ", arr3[i]);
}
printf("\n");
exit(EXIT_SUCCESS);
}
Resultado:
first string, second string, third string, fourth string, fifth string, (null), (null), (null), string literal, hello there,
Como alternativa, pode-se especificar as chaves {}
apenas, que inicializarão os ponteiros no array para null
, e eles podem ser usados posteriormente para armazenar outros endereços de string, ou o programador pode até mesmo alocar memória dinâmica.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define NUM_STRINGS 10
int main() {
char *arr4[NUM_STRINGS] = {};
for (int i = 0; i < NUM_STRINGS; ++i) {
printf("%s, ", arr4[i]);
}
printf("\n");
exit(EXIT_SUCCESS);
}
Resultado:
(null), (null), (null), (null), (null), (null), (null), (null), (null), (null),
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 FacebookArtigo relacionado - C Array
- Alocar dinamicamente un array em C
- Clear Char Array em C
- Copiar Char Array em C
- Inicializar Char Array em C
- Array de Estruturas em C