🎯 Biblioteca string em C
Em poucas palavras
A
<string.h>é a biblioteca padrão da Linguagem C para manipular strings e blocos de memória, com funções para medir (strlen), copiar (strcpy), concatenar (strcat), comparar (strcmp) e buscar (strstr), sempre partindo da convenção de que a string termina em'\0'.
📝 Notas e Desenvolvimento
O que é uma string em C
C não tem um tipo string. Uma string é um vetor de char terminado pelo character nulo '\0', e toda função da biblioteca percorre a memória até encontrá-lo. Por isso o vetor precisa de uma posição a mais que o texto: "FEI", por exemplo, ocupa 4 bytes, sendo 3 bytes para o texto e 1 para o character nulo.
Na prática, as funções recebem ponteiros (char *) para o primeiro character, e não o vetor inteiro. O tamanho real do espaço reservado nunca é conhecido pela função — é responsabilidade de quem programa.
Como usar (Exemplo)
#include <stdio.h>
#include <string.h>
int main(void) {
char nome[20] = "Rafael"; // reserva um vetor de tamanho 20
char saudacao[40] = "Olá, "; // reserva um vetor de tamanho 40
strcat(saudacao, nome); // saudacao = "Olá, Rafael" */
printf("%s (%zu bytes)\n", saudacao, strlen(saudacao));
if (strcmp(nome, "Rafael") == 0) // 0 significa strings iguais */
printf("Nomes iguais\n");
return 0;
}Funções da biblioteca
Comprimento
| Função | O que faz |
|---|---|
strlen(s) | Retorna o número de caracteres antes do '\0' (o terminador não conta). |
Cópia e concatenação
| Função | O que faz |
|---|---|
strcpy(dest, orig) | Copia orig para dest, incluindo o '\0'. |
strncpy(dest, orig, n) | Copia no máximo n caracteres. Se orig tiver n ou mais caracteres, não coloca o '\0'. |
strcat(dest, orig) | Acrescenta orig ao final de dest. |
strncat(dest, orig, n) | Acrescenta no máximo n caracteres de orig e sempre coloca o '\0'. |
Comparação
| Função | O que faz |
|---|---|
strcmp(a, b) | Compara em ordem lexicográfica: 0 se iguais, negativo se a vem antes, positivo se vem depois. |
strncmp(a, b, n) | Igual a strcmp, olhando só os primeiros n caracteres. |
strcoll(a, b) | Compara segundo as regras de ordenação da localidade (locale) ativa. |
Busca
| Função | O que faz |
|---|---|
strchr(s, c) | Ponteiro para a primeira ocorrência do character c, ou NULL. |
strrchr(s, c) | Ponteiro para a última ocorrência do character c, ou NULL. |
strstr(s, sub) | Ponteiro para a primeira ocorrência da substring sub, ou NULL. |
strpbrk(s, cs) | Ponteiro para o primeiro character de s que aparece em cs, ou NULL. |
strspn(s, cs) | Tamanho do trecho inicial de s formado só por caracteres de cs. |
strcspn(s, cs) | Tamanho do trecho inicial de s formado sem nenhum character de cs. |
strtok(s, delim) | Divide s em tokens pelos delimitadores. Altera a string original e guarda estado entre chamadas. |
Blocos de memória (trabalham com n bytes e ignoram o '\0')
| Função | O que faz |
|---|---|
memset(p, c, n) | Preenche n bytes a partir de p com o valor c. |
memcpy(dest, orig, n) | Copia n bytes de orig para dest. Os blocos não podem se sobrepor. |
memmove(dest, orig, n) | Copia n bytes de orig para dest, funcionando mesmo com sobreposição. |
memcmp(a, b, n) | Compara n bytes de dois blocos. |
memchr(p, c, n) | Procura o byte c nos primeiros n bytes de p. |
Armadilhas clássicas
- Estouro de buffer:
strcpyestrcatnão sabem o tamanho dedest. Se o texto não couber, escrevem além do vetor — error silencioso e falha de segurança.strncpysem terminador: quando a origem é longa, o destino fica sem'\0'e as próximas funções leem lixo. Garanta manualmente:dest[n - 1] = '\0';.- Comparar com
==:a == bcompara endereços, não conteúdo. Usestrcmp(a, b) == 0.- Esquecer o
'\0'no tamanho: um texto de 10 caracteres exigechar s[11].
📚 Referências e Fontes
🔗 Conexões do Cofre
- Linguagem:
- Conceitos relacionados:
- Ponteiros e Exemplo de ponteiros em C — strings são manipuladas por ponteiro para
char. - Variáveis em C
- Ponteiros e Exemplo de ponteiros em C — strings são manipuladas por ponteiro para
- Mesma ideia em outras linguagens: