0Pricing
C Academy · Aula

strlen, strcpy, strcat

Funções essenciais para strings.

strlen, strcpy, strcat é uma aula grátis de C Academy no CoddyKit. Esta é a aula 1 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de C Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de C Academy inclui 4 aulas no total.

Strings em C

Em C, uma string é apenas um vetor de char que termina com um caractere especial chamado terminador nulo, '\0'.

As funções de <string.h> dependem desse terminador para saber onde uma string termina. Sem ele, elas leem além do fim do vetor.

#include <stdio.h>

int main(void) {
    char name[] = "Alice";
    printf("%s\n", name);
    printf("Bytes used: %lu\n", sizeof(name));
    return 0;
}

Incluindo string.h

Para usar funções de string, você deve incluir o cabeçalho:

  • #include <string.h>

Isso disponibiliza strlen, strcpy, strcat, strcmp e outras funções.

#include <stdio.h>
#include <string.h>

int main(void) {
    char greeting[] = "Hello";
    printf("Length is %lu\n", strlen(greeting));
    return 0;
}

strlen: contando caracteres

strlen retorna o número de caracteres antes do terminador nulo. Ela não conta o próprio '\0'.

Assim, strlen("cat") retorna 3, embora o vetor ocupe 4 bytes.

#include <stdio.h>
#include <string.h>

int main(void) {
    char word[] = "cat";
    printf("strlen = %lu\n", strlen(word));
    printf("sizeof = %lu\n", sizeof(word));
    return 0;
}

strlen é O(n)

Como as strings de C não armazenam seu tamanho, strlen precisa percorrer cada caractere até encontrar '\0'.

Isso faz dela uma operação O(n). Evite chamá-la repetidamente na condição de um laço para strings grandes.

#include <stdio.h>
#include <string.h>

int main(void) {
    char msg[] = "programming";
    size_t len = strlen(msg);
    for (size_t i = 0; i < len; i++) {
        printf("%c", msg[i]);
    }
    printf("\n");
    return 0;
}

strcpy: copiando strings

Você não pode copiar strings com =. Use strcpy(dest, src), que copia src para dest, incluindo o terminador nulo.

O destino deve ser grande o suficiente para conter a origem e o terminador.

#include <stdio.h>
#include <string.h>

int main(void) {
    char src[] = "Hello";
    char dest[20];
    strcpy(dest, src);
    printf("%s\n", dest);
    return 0;
}

strcpy: perigo de estouro do buffer

Se dest for pequeno demais, strcpy escreve além do buffer e corrompe a memória. Esse é um erro clássico de segurança.

Prefira strncpy(dest, src, n), que copia no máximo n bytes. Observação: strncpy pode não adicionar um terminador nulo se src for longo demais.

#include <stdio.h>
#include <string.h>

int main(void) {
    char src[] = "LongString";
    char dest[5];
    strncpy(dest, src, 4);
    dest[4] = '\0';
    printf("%s\n", dest);
    return 0;
}

strcat: unindo strings

strcat(dest, src) acrescenta src ao final de dest. A escrita começa no terminador nulo de dest e adiciona um novo terminador ao final.

dest já deve ser uma string válida com espaço livre suficiente.

#include <stdio.h>
#include <string.h>

int main(void) {
    char buffer[20] = "Hello, ";
    strcat(buffer, "World");
    printf("%s\n", buffer);
    return 0;
}

Construindo strings passo a passo

Você pode encadear strcpy e strcat para construir uma string parte por parte.

Sempre comece com um buffer inicializado para que o primeiro strcat encontre um terminador válido.

#include <stdio.h>
#include <string.h>

int main(void) {
    char full[50];
    strcpy(full, "Mr. ");
    strcat(full, "John ");
    strcat(full, "Smith");
    printf("%s\n", full);
    return 0;
}

Concatenação mais segura com strncat

strncat(dest, src, n) acrescenta no máximo n caracteres de src e, em seguida, sempre adiciona um terminador nulo.

Isso ajuda a evitar estouros quando o comprimento da origem é desconhecido.

#include <stdio.h>
#include <string.h>

int main(void) {
    char dest[16] = "Data: ";
    char src[] = "1234567890";
    strncat(dest, src, 5);
    printf("%s\n", dest);
    return 0;
}

Valores de retorno

Tanto strcpy quanto strcat retornam um ponteiro para dest. Isso permite aninhar chamadas, embora possa prejudicar a legibilidade.

strlen retorna um size_t, que é sem sinal. Tenha cuidado ao compará-lo com inteiros com sinal.

#include <stdio.h>
#include <string.h>

int main(void) {
    char a[20] = "foo";
    char b[] = "bar";
    printf("%s\n", strcat(a, b));
    return 0;
}

Armadilha comum na alocação

Um erro frequente é esquecer o +1 do terminador nulo ao dimensionar um buffer.

Para uma string de comprimento n, você precisa de n + 1 bytes. O comprimento combinado de duas strings unidas é strlen(a) + strlen(b) + 1.

#include <stdio.h>
#include <string.h>

int main(void) {
    char a[] = "abc";
    char b[] = "de";
    size_t needed = strlen(a) + strlen(b) + 1;
    printf("Need %lu bytes\n", needed);
    return 0;
}

Verificação rápida

Teste sua compreensão dos comprimentos de strings.

Revisão

Você aprendeu as principais funções de string.h:

  • strlen conta os caracteres antes de '\0' (O(n)).
  • strcpy copia uma string; o destino deve ser grande o suficiente.
  • strcat acrescenta conteúdo a uma string existente.
  • Sempre reserve espaço para o terminador nulo e prefira as variantes strn* por segurança.

Perguntas Frequentes

A aula “strlen, strcpy, strcat” é grátis?

Sim — o texto completo de “strlen, strcpy, strcat” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de C Academy, atualize para CoddyKit PRO. O curso de C Academy inclui 4 aulas no total.

O que vou aprender em “strlen, strcpy, strcat”?

Funções essenciais para strings. Você pratica C Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar C Academy?

Nenhuma experiência prévia é necessária. C Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 1 de 4.

Quanto tempo leva a aula “strlen, strcpy, strcat”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de C Academy?

Sim. Cada aula de C Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. strlen, strcpy, strcat
  2. strcmp e comparação
  3. strtok e tokenização
  4. memcpy e memset
← Voltar para C Academy