Usando strcpy()
Parte da seção Logic & Flow do Journey de C da Coddy — lição 16 de 63.
Você aprendeu como encontrar o comprimento de strings com strlen(), mas e se você precisar copiar o conteúdo de uma string para outra? Em C, você não pode usar o operador de atribuição (=) para copiar strings como faria com variáveis comuns.
A razão é que strings são arrays de caracteres e, quando você usa = com arrays, você está apenas copiando o endereço de memória, não o conteúdo real. É aqui que a função strcpy() da biblioteca <string.h> torna-se essencial.
#include <stdio.h>
#include <string.h>
char source[] = "Hello";
char destination[20];
strcpy(destination, source); // Copia "Hello" para destinationA função strcpy() recebe dois argumentos: o array de destino (para onde você deseja copiar) e a string de origem (o que você deseja copiar). Ela copia cada caractere da origem para o destino, incluindo o terminador nulo.
É crucial que o seu array de destino seja grande o suficiente para conter toda a string de origem, além do terminador nulo. Se o destino for muito pequeno, o strcpy() escreverá além dos limites do array, causando comportamento indefinido.
Esta função é fundamental para a manipulação de strings em C, permitindo que você duplique strings, inicialize variáveis de string com conteúdo existente e prepare strings para processamento posterior.
Desafio
FácilEscreva um programa em C que demonstre a cópia de strings usando a função strcpy(). Seu programa deve:
- Ler um número inteiro
nrepresentando o número de operações de string a serem realizadas - Para cada operação:
- Ler uma string de origem (source) da entrada
- Declarar um array de caracteres chamado
destinationcom 100 elementos - Usar
strcpy()para copiar a string de origem para o array de destino - Imprimir tanto a string de origem original quanto a string de destino copiada
- Após todas as operações, demonstrar que as strings copiadas são independentes:
- Modificando o primeiro caractere do último array
destinationpara 'X' - Imprimindo a string de destino modificada para mostrar que ela foi alterada
- Modificando o primeiro caractere do último array
Lembre-se de incluir o cabeçalho <string.h> para usar a função strcpy().
Sua saída deve exibir os resultados no seguinte formato:
Source: [source_string]
Destination: [copied_string]
Source: [source_string]
Destination: [copied_string]
...
Modified last destination: [modified_string]Por exemplo, se a entrada for:
3
hello
world
programmingSua saída deve ser:
Source: hello
Destination: hello
Source: world
Destination: world
Source: programming
Destination: programming
Modified last destination: XrogrammingEste desafio testa sua compreensão sobre o uso de strcpy() para copiar conteúdos de strings de um array de caracteres para outro, a alocação de memória adequada para arrays de destino e demonstra que as strings copiadas são independentes de suas origens.
Folha de consulta
Para copiar strings em C, use strcpy() da biblioteca <string.h>. Você não pode usar o operador de atribuição (=) para copiar strings porque ele apenas copia endereços de memória, não o conteúdo real.
#include <stdio.h>
#include <string.h>
char source[] = "Hello";
char destination[20];
strcpy(destination, source); // Copia "Hello" para destinationA função strcpy() recebe dois argumentos: o array de destino (para onde você deseja copiar) e a string de origem (o que você deseja copiar). Ela copia cada caractere da origem para o destino, incluindo o terminador nulo.
O array de destino deve ser grande o suficiente para conter toda a string de origem mais o terminador nulo para evitar comportamento indefinido.
Experimente você mesmo
#include <stdio.h>
#include <string.h>
int main() {
int n;
scanf("%d", &n);
char source[100];
char destination[100];
// TODO: Escreva seu código aqui
// Use um loop para processar n operações de string
// Para cada operação:
// - Leia a string de origem (source)
// - Use strcpy() para copiar a origem para o destino (destination)
// - Imprima ambas as strings no formato exigido
// TODO: Após o loop, modifique o primeiro caractere do último destino
// e imprima a string modificada
return 0;
}Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Logic & Flow
1Fundamentos de Ponteiros
O que é um Ponteiro?Declarando PonteirosO Operador de Endereço (&)O Operador de Desreferência (*)Ponteiros NULLRecapitulação: Fundamentos de Ponteiros4Projeto: Utilitário de Texto Simples
Visão Geral do ProjetoContando Caracteres2Ponteiros e Arrays
Nomes de Arrays como PonteirosElementos de Array - PonteirosAritmética de PonteirosComparando PonteirosRecapitulação: Percorrendo Arrays com Ponteiros5Ponteiros e Funções
Passagem por ValorPassando Ponteiros para FunçõesModificando Variáveis via PonteirosUm Exemplo Clássico: SwapPassando Arrays para FunçõesRecapitulação: Ponteiros como Argumentos3Arrays de Caracteres e Strings
Strings como Arrays de charO Terminador NuloEntrada de Strings com scanfUsando strlen()Usando strcpy()Usando strcat()Usando strcmp()Recapitulação: Funções Básicas de Strings6Gerenciamento de Memória
Memória Stack vs. HeapAlocação Dinâmica - malloc()Usando sizeof() para AlocaçãoVerificando Falhas de AlocaçãoLiberando Memória com free()Alocando com calloc()Recapitulação: Array Dinâmico9Projeto: Cadastro Simples de Contatos
Projeto: Definir a Struct de ContatoFunção para Criar um Contato