C Strings Básico
Strings em C
Em C, uma string é um vetor de caracteres terminado pelo caractere nulo '\0'. Diferente de linguagens modernas, não existe um tipo nativo string; você manipula sequências de char e usa funções da biblioteca padrão <string.h> para copiar, concatenar, comparar e medir strings.
O terminador nulo é essencial: funções como strlen, strcpy e printf com %s percorrem a memória até encontrar '\0'. Se você esquecer de colocá-lo, o programa pode ler lixo da memória e se comportar de forma imprevisível.
Ao copiar strings, strcpy não verifica o tamanho do destino, o que pode causar buffer overflow. A função strncpy limita o número de caracteres copiados, mas exige cuidado extra: se a origem for maior ou igual ao limite, o terminador nulo pode não ser copiado. Por isso, é comum usar strncpy seguido de uma atribuição explícita do '\0'.
Neste card, você verá como declarar strings, usar funções seguras de cópia e evitar estouros de buffer.
Pontos-chave
- Toda string em C termina com o caractere nulo
'\0'. - A biblioteca
<string.h>fornece funções comostrlen,strcpy,strncpyestrcmp. strcpycopia sem verificar o tamanho do destino, podendo causar buffer overflow.strncpylimita a cópia, mas pode não terminar a string com'\0'.- Sempre reserve espaço para o terminador nulo ao declarar vetores de
char.
#include <stdio.h>
#include <string.h>
int main(void) {
// String literal: o compilador adiciona '\0' automaticamente
const char *origem = "C e divertido";
// Buffer com espaço suficiente para a string + terminador nulo
char destino[20];
// Copia segura: limita ao tamanho do destino e garante '\0'
strncpy(destino, origem, sizeof(destino) - 1);
destino[sizeof(destino) - 1] = '\0';
printf("Origem: %s\n", origem);
printf("Destino: %s\n", destino);
printf("Tamanho: %zu\n", strlen(destino));
// Exemplo de comparação
if (strcmp(origem, destino) == 0) {
printf("As strings sao iguais.\n");
} else {
printf("As strings sao diferentes.\n");
}
return 0;
}