Podivne chovani memcpy()
mira
mira na tmapy.cz
Středa Říjen 10 09:02:12 CEST 2001
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