Da trilha de C Este conceito ainda não saiu como card do dia. ir para o card de hoje

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 como strlen, strcpy, strncpy e strcmp.
  • strcpy copia sem verificar o tamanho do destino, podendo causar buffer overflow.
  • strncpy limita 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.
strings.c
#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;
}

Exercícios

  1. 1
    Fácil

    Contando caracteres de uma string

    Escreva um programa que declare uma string literal "Programacao em C" e use a função strlen para exibir o número de caracteres (sem contar o terminador nulo).

    Resolver
  2. 2
    Médio

    Cópia segura com strncpy

    Escreva um programa que copie a string "Engenharia de Software" para um buffer de 15 caracteres usando strncpy e garanta que o buffer termine com '\0'. Exiba o conteúdo copiado e o comprimento resultante.

    Resolver
  3. 3
    Desafio

    Concatenação segura e verificação de overflow

    Escreva um programa que leia dois nomes (máximo 20 caracteres cada) e os concatene em um buffer de 30 caracteres. Use fgets para ler, remova o '\n' e verifique se a concatenação cabe. Se não couber, exiba uma mensagem de erro; caso contrário, mostre o nome completo e seu comprimento.

    Resolver

Continue estudando