memcpy() v C99

Petr Labaj labaj na volny.cz
Čtvrtek Duben 26 21:38:24 CEST 2018


Já jsem to celé nepochopil (o co Vám jde), takže na mail jako celek 
neodpovím.
Ale unsigned long a uint32_t bude stejné jen na 32-bitovém 
stroji/překladači, ne?
Třeba na 64-bit bude long mít délku 64 bit.

PL

************************

Dne 26.4.2018 v 21:06 Stano napsal(a):
> 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
> _______________________________________________
> HW-list mailing list  -  sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list



Další informace o konferenci Hw-list