【C言語】
memsetの落とし穴
全部Fで埋める

memsetの 落とし穴 全部Fで埋める

第2引数に0xFFFFFFFF

#include <string.h>
#include <stdio.h>
int     main(void){
    int ary[64];

    //配列を全部0xFFFFffffで埋めたい
    memset(ary,0xFFFFffff,sizeof(ary));
    printf("%x\n",ary[0]);
    printf("%x\n",ary[63]);    
}

➡実行結果

./a.out
ffffffff
ffffffff

第2引数に指定できるのはint型ですが
実質unsigned charで 0~0xFFまでしか
有効でありません。


第2引数に0x12345678

#include <string.h>
#include <stdio.h>
int     main(void){
    int ary[64];  
    
    //配列を全部0x12345676で埋めたい
    memset(ary,0x12345678,sizeof(ary));
    printf("%x\n",ary[0]);
    printf("%x\n",ary[63]); 
}

➡実行結果

./a.out
78787878
78787878

第2引数
0x12345678の上位は捨てられ
0x78の下位1byteのみ有効となります。