- 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()
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:
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'.
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);
}
Postar um comentário