Enviar um café pro programador

Pode me ajudar a transformar cafeína em código?

strcpy - Como copiar uma string em C

  • strcpy: char *strcpy( char *dest, char *orig );
Fornecemos a string de origem e ela é copiada e armazenada na string de destino, não importando como era a string de destino anteriormente.



strcpy() - Como copiar uma string em outra, em C

Nesse exercícios, temos que copiar todos os caracteres da string de origem para a string de destino.
Ou seja, vamos copiar do elemento de índice 0 da string de origem, até o índice que contém o delimitador \0.

Para isso, podemos usar a função strlen(), que retorna o número de caracteres da string.
Note que, os caracteres visíveis na string de origem, são de 0 até strlen(orig) -1
E o caractere de índice strlen(orig) é o caractere delimitador \0.

Por isso, vamos copiar o caractere da posição 0 até o da posição strlen(orig), pois a nossa string de destino tem que ter o caractere delimitador ao final.

Veja como fica nosso código em C:



char *strcpy(char *dest, char *orig)
{
    int i;

    for(i=0 ; i < strlen(orig) ; i++)
        dest[i] = orig[i];

    dest[i]='\0';

    return dest;
}

6 comentários:

Anônimo disse...

char *strcpy(char *dest, char *orig)
{
while(orig)
{
dest = orig;
dest++;
orig++;
}
return dest;
}

Anônimo disse...

Utilize strncpy e cuidado com off by one. strNNNNNNNNNNcpy

[]s

C Progressivo disse...

Olá,

Como dissemos no artigo sobre a biblioteca string.h, o objetivo de re-fazermos essas funções é apenas como exercício.

Lá deixamos bem claro que essas tentativas de criar essas funções é somente didático, para saber como as coisas funcionam (por isso podem surgir várias soluções, como a do anônimo de cima), e sugerimos que cada um tente criar as suas funções do seu próprio jeito, e não copiar a implementação original.

Também deixamos bem claro que, na hora de usar em um programa de verdade, devemos usar as funções da biblioteca original, que obviamente são bem mais confiáveis.

Obrigado aos dois pela contribuição.

Anônimo disse...

Se a *orig é copiada até antes do terminador nulo \0 , a string *dest não ficaria sem esse terminador?

ao meu ver, a função deveria ser como abaixo pra garantir que esse terminador também seja copiado pra
*dest


char *strcpy(char *dest, char *orig)
{
int i;

for(i=0 ; i <= strlen(orig) ; i++)
dest[i] = orig[i];

return dest;
}

Unknown disse...

estou tentando usar essa strcpy, mas quando o ponteiro a aponta para outro ponteiro está dando erro. SEGUE ABAIXO A PARTE DO CÓDIGO EM QUE USO O STRCPY.


noLista* selectionSort(noLista *ini){
char nomeA[30];


noLista* aux = ini;//aux= ini
noLista* aux2, *tempo;
float tmp, min;

for(aux = ini; aux!=NULL; aux = aux->prox){
tempo = aux;
min = aux->nota;
exibe(ini);
for(aux2 = aux->prox; aux2!=NULL; aux2 = aux2->prox){

if( aux2->nota < min){

min = aux2->nota;

strcpy(nomeA, aux2->nome);
tempo = aux2;

}

}
if(aux->nota != min){

tmp = aux->nota;
printf("tmp nota %f\n", aux->nota);
strcpy(nomeA, aux->nome);
aux->nota = min;

strcpy(aux->nome, aux2->nome);
strcpy(aux2->nome, nomeA);
tempo->nota = tmp;

strcpy(tempo->nome, nomeA);

}



}

return ini;
}


A PARTE DO CÓDIGO QUE ESTÁ GERANDO O ERRO

Anônimo disse...

Oi,
Como eu compilo isso? Precisa de int main()? Alguém ode me dar um exemplo?