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