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