====== Strings em C ======
===== Implementação de Strings =====
A linguagem C implementa o conceito de cadeia de caracteres, ou strings, utilizando um [[vetor_matriz|vetor]] de caracteres. Ao se definir uma string portanto deve-se definir um [[vetor_matriz|vetor]] de caracteres com determinado tamanho.
A marcação do fim da string será indicada através da colocação de um caractere zerado, chamado tecnicamente de caractere'' **NULL**''. Este caractere pode ser indicado, testado, usado através do literal definido ''NULL'' quando se incluem arquivos //headers// ''stdio.h'' ou ''string.h'' ou através da forma de constante de caractere ''**‘\0’**''.
Como a string deve ser terminada por um caractere ''NULL'' sempre deve ser considerada uma posição a mais no vetor para este caractere. Por exemplo, se for definido um vetor de nomes com até 30 caracteres deve-se definir um vetor com 31 posições. Na definição de uma string pode-se também já assinalar um valor bastando para isto colocar após o **''‘=’''** a constante de inicialização entre aspas.
Para se imprimir uma string deve-se ser utilizador o formato [[tipos_dados|‘%s’]].
/* strings.c */
#include
#include
int main(void)
{
/* A definição é idêntica a um vetor, neste caso têm-se 39 posições para caracteres (o último é reservado para o \0) */
char sNome [40] = "Pacifico Pacato Cordeiro Manso";
printf("[%s]\n", sNome);
printf("[%d]\n", sizeof(sNome));
/* Este comando "limpa" o conteúdo da variável */
sNome[0] = NULL;
printf("[%s]\n", sNome);
/* o operador sizeof mostrará o tamanho reservado para a string e não o seu tamanho atual */
printf("[%d]\n", sizeof(sNome));
return 0;
}
===== Entrada e Saída de Strings =====
Para se realizar a entrada de strings pode-se utilizar a função [[scanf]], usando como formato o [[tipos_dados|‘%s’]]. Um detalhe importante sobre esta forma de entrada de string é o fato de somente ser lido a seqüência de caracteres até ser encontrado um branco, não sendo possível ler caracteres brancos para uma variável usando o [[scanf]].
Uma maneira mais útil de se fazer á leitura de strings do terminal é utilizar a função [[gets]]. Esta função lê toda a linha e coloca o conteúdo na variável indicada, permitindo assim a entrada de caracteres em branco para dentro da cadeia.
É de inteira responsabilidade do programador reservar espaço suficiente na variável para ser realizada a entrada de dados. Caso entre mais caracteres que o reservado ocorrerá invasão de memória cancelando o programa. Para realizar a saída de uma string, pode-se utilizar a função [[printf]] com o formato [[tipos_dados|‘%s’]] ou a função específica [[puts]].
/* strings_es.c */
#include
#include
int main (void)
{
char sNome [30];
char sFrase [100];
printf("Entre com uma frase : \n");
gets(sFrase);
puts(sFrase);
printf("Entre com o seu nome : ");
scanf("%s\n", &sNome);
printf ("Sr(a). %s seja bem vindo ao curso\n\n", sNome);
return 0;
}
===== String como vetor =====
Devido ao fato de uma string ser implementado como um [[vetor_matriz|vetor]] de caracteres, nada impede que se faça o acesso a string utilizando índices, acessando assim cada caractere da string de maneira individual.
/* string_vetor.c */
#include
#include
int main (void)
{
char sNome[40];
int i;
printf("Entre com o seu nome : \n");
gets(sNome);
printf("Nome digitado\n");
for (i=0; i < strlen(sNome); i++)
{
putchar(sNome[i]);
}
putchar ('\n');
return 0;
}
===== Funções =====
* [[strlen]] - tamanho de um string
* [[strcat]] e [[strncat]] - concatena uma string
* [[strcpy]] e [[strncpy]] - copia uma string para outra
* [[strcmp]] e [[strncmp]] - comparação de strings
* [[sprintf]] e [[snprintf]] - impressão em strings
* [[sscanf]] - leitura em strings
--- //[[marcos@laureano.eti.br|Marcos Laureano]] 2009/05/10 18:35//