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
- strlen, strcpy, strcat
- strcmp e comparação
- strtok e tokenização
- memcpy e memset