segunda-feira, 27 de outubro de 2014

Memcpy - Copiando uma estrutura


O C possui funções para manipulação de memória, e a função memcpy(); é uma delas,
blocos de memória podem ser copiados facilmente com esta função, cuja sintaxe é:
memcpy ( *espaço1, *espaço2, bytes );
a função memcpy(); faz parte do arquivo de cabeçalho string.h.
E neste código mostro um exemplo de como copiar uma struct inteira para uma outra
struct vazia previamente declarada.
Fica esclarecido que a área de memória do destino, jamais pode ser menor que o de origem,
pra que se evite aguns problemas de execução.

Veja abaixo imagens do programa em execução:




Veja abaixo o código do programa:

#include <stdio.h>
#include <conio.h>
void Janela5(){system("Color F0");
int lin, col;
for ( lin = 0; lin <= 25; lin++ ){
for ( col = 0; col <= 80; col++ ){
gotoxy( col, lin );
if ( lin == 2 ){textbackground(LIGHTBLUE);printf( " ");}
if ( col == 1 ){textbackground(LIGHTBLUE);printf(" ");}
if ( lin == 25 ){textbackground(LIGHTBLUE);}
if ( col == 80 ){textbackground(LIGHTBLUE);printf(" ");}
}
}textbackground( BLACK );
}
void inicio( ){system ("title MEMCPY - COPIANDO UMA ESTRUTURA");
int i;do{Janela5();textbackground(WHITE);
textcolor(LIGHTRED);gotoxy(26,7);printf("MEMCPY - COPIANDO UMA ESTRUTURA");
textcolor(YELLOW);gotoxy(25,10);printf("Programa desenvolvido por:");
textcolor(LIGHTCYAN);gotoxy(52,10);printf("Samuel Lima");
textcolor(LIGHTGREEN);gotoxy(34,12);printf("sa_sp10@hotmail.com");
textcolor(LIGHTBLUE);gotoxy(24,14);printf("DIGITE    PARA SAIR OU   PARA CONTINUAR  ");
textcolor(LIGHTRED);gotoxy(32,14);printf("1");textcolor(LIGHTRED);gotoxy(47,14);printf("2");
gotoxy(41,16);
scanf("%d",&i);fflush(stdin);
if( i == 1 ){textcolor(LIGHTRED);gotoxy(35,20);printf ("MUITO OBRIGADO");Sleep(1800);exit(0);}
if( i == 2 ){system("cls"); return;}
else {textcolor(LIGHTRED);gotoxy(37,20);printf ("\aOPÇÃO ERRADA");Sleep(1800);system("cls");}
}
while(i);
}
struct Classe{
char Nome [20 ];
float Idade;
float No_tas;
int Chamada;
};
struct Classe Ida_Not_cha [ 10 ] =
{ { "João Silva", 20.4, 9.5, 1 },
{ "Amanda Santos", 18.6, 8.9, 5 },
{ "Ricardo Souza", 16.5, 6.4, 8 },
{ "Cláudia Ferraz", 19.4, 7.5, 4 },
{ "Rafaela Mendes", 17.5, 8.0, 3 },
{ "Samuel Júnior", 17.0, 7.7, 9 },
{ "Sandro Rúbens", 19.7, 6.9, 2 },
{ "Lúcia Paola", 18.6, 9.0, 6 },
{ "Luíz Manolo", 16.0, 10.0, 7 },
{ "Estér Lima", 20.0, 8.5, 10 } };
int main(){inicio( );Janela5();
int i;
struct Classe Copia [ 10 ];
memcpy(Copia, Ida_Not_cha, sizeof(struct Classe) * 10);textbackground(WHITE);
textcolor(LIGHTRED);gotoxy(26,3);printf("MEMCPY - COPIANDO UMA ESTRUTURA");
textcolor(LIGHTBLUE);gotoxy(24,5);printf("Imprimindo abaixo a struct original ");
textcolor(MAGENTA);gotoxy(18,7);printf("Nomes          Idades          Notas        chamadas");
textcolor(BLACK);
for (i = 0; i < 10; i++){
gotoxy(15, i  + 9);
printf("%s\t %.1f\t\t %.1f\t\t %d\n", Ida_Not_cha [ i ] . Nome, Ida_Not_cha [ i ] . Idade,
Ida_Not_cha [ i ] . No_tas, Ida_Not_cha [ i ] . Chamada );
}
Sleep(1800);textcolor(BROWN);
gotoxy(32,22);printf("PRESSIONE QUALQUER TECLA");getche();
system("cls");Janela5();textbackground(WHITE);
textcolor(LIGHTRED);gotoxy(26,3);printf("MEMCPY - COPIANDO UMA ESTRUTURA");
textcolor(LIGHTBLUE);gotoxy(25,5);printf("Imprimindo abaixo a struct copiada ");
textcolor(MAGENTA);gotoxy(18,7);printf("Nomes          Idades          Notas        chamadas");
textcolor(BLACK);
for (i = 0; i < 10; i++){
gotoxy(15, i  + 9);
printf("%s\t %.1f\t\t %.1f\t\t %d\n", Copia [ i ] . Nome, Copia [ i ] . Idade,
Copia [ i ] . No_tas, Copia [ i ] . Chamada );
}
Sleep(1800);textcolor(BROWN);
gotoxy(36,22);printf("MUITO OBRIGADO");getche();
getche();
}

Nenhum comentário:

Postar um comentário

Observação: somente um membro deste blog pode postar um comentário.