🎯 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çãoO que faz
strlen(s)Retorna o número de caracteres antes do '\0' (o terminador não conta).

Cópia e concatenação

FunçãoO 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çãoO 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çãoO 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çãoO 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: strcpy e strcat não sabem o tamanho de dest. Se o texto não couber, escrevem além do vetor — error silencioso e falha de segurança.
  • strncpy sem 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 == b compara endereços, não conteúdo. Use strcmp(a, b) == 0.
  • Esquecer o '\0' no tamanho: um texto de 10 caracteres exige char s[11].

📚 Referências e Fontes

🔗 Conexões do Cofre

🌐 Referências Externas