====== 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//