memcpy() v C99

Milan B. milan na bastl.sk
Čtvrtek Duben 26 21:46:50 CEST 2018


No co ak napriklad unsigned a uint32_t maju dlzku 32 bitov a unsigned 
long 64 bitov. A v tom pripade zavisi, ako dana architektura uklada cislo.

Pre big endian architekturu by zrejme vysledok bol nie 4,7 ale 4,1   
prve styri byte byte cisla ulozeneho (byte po byte) ako 0,0,0,0,0,0,0,6 
su ine ako 4 byte cisla ulozeneho ako 6,0,0,0,0,0,0,0

co s tym ma ale memcpy nerozumiem, tento problem sa prejavi aj pri inych 
operaciach meniacich typ smernika

-m-




On 26.04.2018 21:06, Stano wrote:
> 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ší část ---------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 3980 bytes
Desc: S/MIME Cryptographic Signature
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20180426/c1def2b5/attachment.bin>


Další informace o konferenci Hw-list