Podivne chovani memcpy()

mira mira na tmapy.cz
Středa Říjen 10 10:23:32 CEST 2001


Program uz chodi - neuvedomil jsem si, ze int ma v mem pripade 4 bytes,
takze pri unsigned short to funguje.

 Nicmene i tak mi to neodpovedelo na podivne chovani memcpy(), ackoli uz
mi program funguje. Ale clovek asi nemuze vedet vsechno.

 S pozdravem, 
			Michal Řada, Mgr.

mira wrote:
> 
> V programu v C se momentalne setkavam s podivnym chovanim funkce
> memcpy().
> 
> V jedne procedure vytvarim buffer (char* packet), veliky  BYTU, do
> ktereho ruzne ukladam bud 1-bytove nebo 2-bytove veci (1-bytove
> prirazenim, 2-bytove pomoci memcpy).
> 
>  V druhe procedure buffer ctu. Narazil jsem ale na podivne chovani
> funkce memcpy():
> 
>  Kdyz nacitam 1-bytove promenne, vse je v pohode, to delam ciste pomoci
> napr.:
>         cas = packet[19];
> 
> U 2 bytovych veci pouzivam opet memcpy:
>         memcpy(&cislo_1,packet+7,2);
>         memcpy(&cislo_2,packet+9,2);
>         memcpy(&cislo_3,packet+11,2);
>         memcpy(&cislo_4,packet+22,2);
>         memcpy(&cislo_5,packet+27,2);
>         memcpy(&cislo_6,packet+29,2);
> 
> promenne cislo_x jsou typu unsigned int a nechavam je vypisovat pomoci
> printf("..%u\n",cislo_x);
> 
> Prvni 3 cislo_x mne ukaze dobre, druhe tri jsou ale uplne nesmysly.
> Pritom, kdyz pred i po teto operaci necham vypsat obsah memcpy prikazem:
> 
>         unsigned int tempor,i;
>         for(i=0;i<33;i++) {
>                 memcpy(&tempor,packet+i,2);
>                 printf("Mesg+%u: %u\n\n\n",i,tempor);
>         };
> tak tam mi cisla ulozena v packet+22, packet+27, packet+29 zobrazi
> spravne. Ovsem cislo_4,cislo_5,cislo_6 jsou nesmysly, ackoli
> cislo_1,cislo_2,cislo_3 je bez problemu dobre.
> 
> Setkal se nekdo s necim podobnym? Jak jste to resili?
> 
> (Upozornuji, ze zdrojova i cilova pamet neprekryvaji!)
> Dekuji za vase tipy,
>                                 Michal Řada, Mgr.


Další informace o konferenci Linux