有一个arr
数组,它为两个short
s(总共4字节)分配了内存。然后我相应地用ffff
和eeee
填充这两个元素。在我尝试遍历与分配给4char
s的内存相同的分配内存(也就是总共4个字节,但现在我可以按1个字节查找元素)之后。从输出中可以看到,它没有显示出我所期望的(将相同的0xeeeeffff
拆分为4个独立的元素)。密码怎么了?
short *arr = malloc(sizeof(short) * 2);
*arr = 0xeeee;
*(arr + 1) = 0xffff;
printf("%p\n", &arr[0]);
printf("%p\n", &arr[1]);
// convert
char * cnv = (char *)arr;
printf("=======\n");
for (int i = 0; i < 4; i++) {
printf("%p\n", cnv);
printf("%x\n", *cnv);
cnv++;
}
输出:
0x759010
0x759012
=======
0x759010
ffffffee # expect 'ee'
0x759011
ffffffee # expect 'ee'
0x759012
ffffffff # expect 'ff'
0x759013
ffffffff # expect 'ff'
最佳答案
%x
需要一个unsigned int
,而不是一个char
,因此您的程序具有未定义的行为。你需要%hhx
。