memcpy() v C99
Stano
stano.hw na gmail.com
Čtvrtek Duben 26 21:06:20 CEST 2018
Zdravim konferenci
Mozno budem za blbca ale radsej sa chvilu verejne strapnit nez ostat
blby cely zivot.
Snazim sa pochopit v com je podstata problemu pri memcpy v C99.
Priklad z internetu:
|#include <stdio.h>
#include <string.h>
void increment_32_bit_uint(void *p)
{
uint32_t temp;
memcpy(&temp, p, sizeof temp);
temp++;
memcpy(p, &temp, sizeof temp);
}
int main(void)
{
unsigned *ip = malloc(sizeof (unsigned));
unsigned long *lp = malloc(sizeof (unsigned long));
*ip = 3; *lp = 6;
increment_32_bit_uint(ip);
increment_32_bit_uint(lp);
printf("%u %lu", *ip, *lp);
return 0;
}
|
Chapem to tak ze unsigned a unsigned long NIEJE to iste. Premeenu
unsigned moze prekladac spracovavat aj inak nez len velkost strojoveho
slova ale hypoteticky moze pouzit aj minimalnu moznu sirku slova. To by
bolo jadro problemu. Ale co citam tak spravne nieje
ani ked pouzijeme jednu premennu unsigned long a druhu uint32_t a tam uz
obe maju pevnu velkost.
Moze mi prosim niekto ozrejmit k comu tam dochadza/moze dojst a preco.
A nasledne ako sa danym problemom vyhnut.
Umna program aj pre -std=c99 dava vysledok 4 a 7 takze problem neviem
zreprodukovat ale to neznamena ze nikdy nenastane.
Tak chcem vediet s cim mam co docinenia.
Dakujem za odpovede
Stano
Další informace o konferenci Hw-list