Array de Strings em C

  1. Use a notação de matriz 2D para declarar um array de strings em C
  2. 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 matriz 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 <stdlib.h>
#include <string.h>
#include <stdio.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 <stdlib.h>
#include <string.h>
#include <stdio.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 <stdlib.h>
#include <string.h>
#include <stdio.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 nulo, 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 <stdlib.h>
#include <string.h>
#include <stdio.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),

Artigo relacionado - C Array

  • Array de Estruturas em C
  • Imprimir Char Array em C
  • Artigo relacionado - C String

  • Imprimir Char Array em C
  • String concatenada e Int em C