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