Escolar Documentos
Profissional Documentos
Cultura Documentos
Bruno Feij
Escrever funes que manipulam strings basicamente passear com o ponteiro e interromper quando o
terminador encontrado. E no importa se a string foi armazenada de modo esttico ou dinmico 1.
A funo strlen, que recebe um string e retorna o seu tamanho, um timo exemplo para explicar como
trabalhamos com strings. Observe que o tamanho de "puc" 3, o de "eu" 2 e o
tamanho da string vazia "" zero; ou seja: no contamos o terminador \0. No exemplo
da Fig. 1, o vetor a armazena uma string de tamanho 3 (apesar de ocupar 4 endereos
Fig. 1 de memria).
A rigor, o teste s[n] != '\0' pode ser simplificado para s[n] apenas:
int strlen(char * s)
{
int n = 0;
while(s[n])
n++;
return n;
}
O teste em um while (ou um for, ou um if) uma expresso booleana que retorna 0 se falso e diferente de
zero se verdadeiro (i.e., verdadeiro pode ser 1, 99, -5, ). Portanto, lembrando que o nico caractere que
tem valor zero o terminador \0, basta verificar diretamente o valor de s[n]. Se voc achar isto estranho, veja
os seguintes exemplos com if:
if (2 5) printf(oi\n); // imprime oi
if (2 5) printf(oi\n); // nada imprime
O trabalho com strings est muito ligado a manipulao de ponteiros. Portanto, em vrias funes com string,
programadores preferem usar a sintaxe + para a aritmtica de endereos (tambm chamada de aritmtica de
ponteiros). Observe que na forma mais concisa (e crptica), testamos *s e depois incrementamos s em *s++.
Apesar de crptica, esta ltima forma uma maneira fluente de falar C (entretanto, as 3 formas compilaro
para basicamente o mesmo cdigo com a mesma eficincia). Trata-se, muito mais, de uma questo de estilo.
1Por exemplo, em char a[4]; a o nome de um um array alocado estaticamente e em char * a = (int *)malloc(4); a um
ponteiro para um vetor alocado dinamicamente.