Enviar um café pro programador

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

memcpy - Copiando caracteres de uma string para outra

  • memcpy: char* memcpy( char *dest, char *src, int n );

Copia os 'count' primeiros caracteres da string 'src' e coloca nas primeiras 'count' da string 'dest'.

Como implementar a função memcpy()

Primeiro recebemos do usuário duas strings: a 'orig', que é a string de origem, e a 'dest', que é a string de destino.

Ou seja, vamos pegar os 'n' primeiros caracteres da string de origem, e colocar nas 'n' primeiras posições da string de destino.

Como estamos passando strings (vetores), estamos passando seu endereço.
Logo, essa função vai alterar a string de destino.

Para fazer isso, basta fazer com que a string dest receba os 'n' primeiros caracteres (da posição 0 até a n-1) da string orig.

Veja como ficou o código C para implementar essa função:


char *memcpy(char *dest, char *orig, int n)
{
    int i;

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

    return dest;
}

2 comentários:

Anônimo disse...

Olá, bem eu tenho uma pergunta(é bem provável que seja uma pergunta idiota) mas vamos lá; por que no código acima não foi colocado o caractere delimitador "\0'.

DNRCleber disse...

Sem o '\n` minha função estava a imprimir o restante dos caracteres como símbolos.
Estou usando o compilador "Móvel c" no Android. Segue meu código.
#include
#include
#include
#define MAX 30

int _strlen(char * str);
char *_strcpy(char * dest, char * orig);
char *_memcpy(char * dest, char * orig, int);
void LimparLixo();

int main()
{
int op, p, qtd;
char *palavra[MAX], *destino[MAX];

do
{
printf("1: strlen()\n");
printf("2: strcpy()\n");
printf("3: memcpy()\n");
scanf("%d",&op);

system("cls");
switch(op)
{
case 1:
printf("strlen()\n");//conta caracteres de uma string
//LimparLixo();//tentei e deu certo antes de usar a funcao switch,,case
//fgets(palavra, sizeof(palavra) -1, stdin);//conta tambem o buffer \n do teclado
gets(palavra);
//fflush(stdin);//nao funciona com funcao fgets()
p = _strlen(palavra);
printf("Tamanho = %d", p);
break;

case 2:
printf("strcpy()\n");//copia uma string de uma variavel para outra
fgets(palavra, sizeof(palavra), stdin);
_strcpy(destino, palavra);
//printf("Palavra [%s]", destino); // junto da funcao fgets, contabilliza o buffer '\n'
puts(destino);
//fflush(stdin);
break;

case 3:
printf("memcpy()\n");//copia quantidade de caracteres de uma string para a variavel destino
//printf("Quantos caracteres copiar?\t");
//fgets(palavra, sizeof(palavra), stdin);
gets(palavra);
//scanf("%f", palavra);
qtd = 3;
//scanf("%d", &qtd);
_memcpy(destino, palavra, qtd);
printf("Palavra [%s]", destino);
//puts(destino);
break;

default:
printf("Erro, digite 'sair'");

}
}while(op == 'sair');
return 0;
}

int _strlen(char * str)
{
int cont = 0;
while(str[cont] != '\0')
cont++;
return cont;
}

char *_strcpy(char * dest, char * orig)
{
int i;
for(i = 0 ; i < _strlen(orig) ; i++ )
dest[i] = orig[i];
dest[i] = '\0';
return dest;
}

char *_memcpy(char * dest, char * orig, int n)
{
int i;
for(i = 0; i < n ; i++)
dest[i] = orig[i];

dest[i] = '\0';// estava a imprimir o restante dos caracteres restantes como simbolos
return dest;
}

void LimparLixo()
{
int ch;
do
{
ch = getchar();
}while(ch != EOF && ch != '\n');
clearerr(stdin);
}