STRING no C: Qual o seu nome?

Introdução

Muitas linguagens de programação tipadas, tais como PASCAL e DELPHI, têm a STRING como um tipo primitivo. Outras, como o JAVA, declaram a STRING como uma classe. Mas independente da linguagem de programação a STRING é baseada na mesma estrutura, uma cadeia de caracteres. Na linguagem de programação CSTRING também existe, embora seu tratamento não seja feito de uma maneira "comum" a outras linguagens de programação. Este artigo irá aborda o uso da STRING na linguagem de programação C mostrando a sua utilização de forma prática. No próximo artigo serão abordadas as funções que a linguagem de programação C oferece para serem utilizadas com STRINGs.

Definição

Embora muitos desenvolvedores de outras linguagens de programação não percebam, uma STRING é uma estrutura que representa uma cadeia de caracteres. Os desenvolvedores da linguagem de programação C têm que absorver esse conceito o mais rápido possível, pois nessa linguagem de programação a STRING só pode ser trabalhada como um vetor.

Obs.: Na linguagem de programação C++, o desenvolvedor pode utilizar a palavra reservada string para trabalhar com STRINGs, mas o head string deve ser incluído.

Devido essa obrigatoriedade de tratar uma STRING como um vetor de caracteres, boa parte dos iniciantes na linguagem de programação C sentem como estivessem sem suas cabeças, mas durante este artigo essas dificuldades serão amenizadas.

STRING na Linguagem de Programação C

Já foi dito que na linguagem de programação C a STRING é um vetor do tipo caractere, o detalhe fica por conta da utilização obrigatória do caractere 0 (zero) para finalizar o vetor.

"Em outras palavras, string é uma série de caracteres, em que cada um ocupa um byte de memória, armazenado em sequência e terminado por um byte de valor zero ('0'). Cada caractere é um elemento independente da matriz e pode ser acessado por meio de um índice." [MIZRAHI]

Obs.: Uma matriz pode ter mais de uma dimensão, quando a matriz tem apenas uma dimensão também pode ser chamada de vetor. Na linguagem de programação C uma matriz é vista como um vetor de vetores.

Também é dito por [MIZRAHI] que o compilado da linguagem C trata o que está entre aspas duplas como uma STRING constante, ou seja, uma constante composta por uma cadeia de caracteres.

Exemplo de utilização

O código abaixo apresenta alguns exemplos de utilização de STRING na linguagem de programação C.

char str1[10] = {'J', 'o', 'a', 'o', '\0'};
printf("Saida 1: %c %s\n", str1[0], str1);

char str2[10] = {'J', 'o', 'a', 'o'};
printf("Saida 2: %c %s\n", str2[0], str2);

char str3[ ] = "Joao";
printf("Saida 3: %c %s\n", str3[0], str3);

char str4[3] = "Joao";
printf("Saida 4: %c %s\n", str4[0], str4);

char str5[3][10] = {"Joao", "Maria", "Jose" };
printf("Saida 5: %c %s\n", str5[1][0], str5[1]);

Explicando o código:

Na str1, a STRING foi declarada e preenchida da maneira que qualquer outro vetor poderia ser feito na linguagem C. A diferença está por conta da última posição do vetor que utiliza o caractere de escape "\" (barra invertida) junto com o finalizador de obrigatório 0 (zero).

No vetor str2, a STRING foi declarada de forma semelhante ao vetor str1, mas nesse caso o preenchimento não utilizou o finalizador obrigatório 0 (zero), ele é incluído automaticamente no final da STRING pelo compilador.

No vetor str3 não foi informado o tamanho do vetor, isso foi deixa por conta do compilador.

No caso do vetor str4 a declaração está correta, mas a utilização irá gerar um processamento incorreto por parte do compilador, pois foi informado um tamanho 3 (três) para o vetor, mas foi incluída uma STRING de tamanho 4 (quatro).

Obs.: Diferentemente da maiorias das linguagens de programação tipadas (PASCAL, DELPHI, JAVA, etc.), a linguagem C não tem controle de tamanho de vetores, ficando por conta do desenvolvedor esse controle sobre a estrutura.

str5 não é um vetor, mas sim uma matriz (ou um vetor de vetores) que suporta três vetores de STRING de tamanho 10 (dez).

A saída do código anterior é apresentada na sequência.

Saida 1: J Joao
Saida 2: J Joao
Saida 3: J Joao
Saida 4: J Joa��
Saida 5: M Maria

Pela saída do código é possível ver que no caso dos vetores str1, str2 e str3, sempre foi mostrado o caractere que estava na primeira posição do vetor, ou no índice 0 (zero), e todo o valor do vetor.

A saída do vetor str4 deveria ser igual aos anteriores, mas como o valor informado ao mesmo foi maior que o tamanho declarado para o vetor, a saída ficou estranha, uma vez que a STRING recebida pelo vetor está diferente da STRING de saída. Os caracteres após Saida 4: J Joa estão representando caracteres aleatórios.

A matriz str5 tem uma saída parecida com os vetores str1, str2 e str3, entretanto o processo acontece sobre a STRING inserida na segunda posição da matriz, ou índice 1 (um). Perceba que é mostrado o caractere M seguido da STRING Maria, o primeiro valor foi extraído por str5[1][0], o segundo por str5[1].

Conclusão

Embora muitas linguagens de programação, como PASCAL e DELPHI, tratem uma STRING como um tipo primitivo e outras, como o JAVA, as tratem como uma classe, isso não acontece na linguagem de programação C. O artigo mostrou que uma STRING é tratada na linguagem de programação C como um vetor do tipo primitivo char.

Não obstante, os exemplos colocados nesse artigo só levaram em consideração a alimentação da STRING diretamente no código. O próximo artigo mostrará como receber uma valor informado pelo usuário e inserir o mesmo numa STRING, além de mostrar algumas funções da linguagem de programação C para essa estrutura.

Até o próximo artigo.

Bibliografia Citada

MIZRAHI, Victorine Viviane. Treinamento em linguagem C. São Paulo: Pearson Prentice Hall, 2008.