aula 196

Nossa função strcpy para fazer a cópia de uma string

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;
}

Deixe um comentário

dezessete + 2 =

Wagner Gaspar

Capixaba de São Gabriel da Palha, Espírito Santo. Bacharel em Ciência da Computação pela Universidade Federal do Amazonas e mestre em informática pela Universidade Federal do Espírito Santo.