Lembra da função strcpy da biblioteca string.h que faz a cópia de uma string? Na aula de hoje vamos aprender como criar nossa função strcpy para fazer a cópia de uma string com ponteiros.
A ideia que usaremos aqui é basicamente fazer uma cópia da função strcpy da biblioteca padrão da linguagem C. Nossa função irá receber dois ponteiros para dois vetores de caracteres, um a ser copiado, chamado de origem, e outro que irá receber a cópia, chamado de destino. Por fim, retornaremos a quantidade de caracteres copiados, ou seja, o tamanho da string copiada. Assim, teremos a seguinte assinatura para nossa função:
// assinatura da nossa função strcpy int strcpy (char *destino, char *origem)
Como desejamos fazer uma cópia da string origem, faremos uma repetição até encontrarmos o caracter de fim de string ( \0 ). Enquanto não for o fim da string origem, faremos uma cópia do caracter presente naquela posição para o vetor destino. Para isso precisaremos de uma variável contadora inicializada com zero, o índice do primeiro caracter, incrementada após cada cópia.
A atribuição é feita por meio de aritmética de ponteiros, que já vimos nas aulas anteriores. Dessa forma, ao somar o nome do vetor (que é um ponteiro para a primeira posição do vetor) com a variável i, avançamos para as posições seguintes em nosso vetor.
while(*(origem + i) != '\0'){
*(destino + i) = *(origem + i);
i++;
}
Quando a repetição finalizar, significa que a posição origem + i é exatamente o caracter de fim de string. Como não copiamos esse caracter, precisamos adicioná-lo na nossa string destino, assim:
// finalizando a string cópia
*(destino + i) = '\0';
Por fim retornamos a variável i que representa exatamente a quantidade de caracteres copiados, dizendo em outras palavras, é o tamanho da nossa string.
Código de exemplo completo em C
/*
Aula 196: Exercício 5
Código escrito por Wagner Gaspar
Maior de 2021
5) Implemente a função strcpy (char *destino, char *origem) usando ponteiros.
*/
int strcpy (char *destino, char *origem){
int i = 0;
while(*(origem + i) != '\0'){
*(destino + i) = *(origem + i);
i++;
}
*(destino + i) = '\0';
return i;
}
int main(){
char destino[25], origem[25] = {"Bom dia."};
printf("Tamanho: %d\n", strcpy(destino, origem));
printf("Destino: %s\n", destino);
return 0;
}
