有一个arr数组,它为两个shorts(总共4字节)分配了内存。然后我相应地用ffffeeee填充这两个元素。在我尝试遍历与分配给4chars的内存相同的分配内存(也就是总共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

09-30 14:09
查看更多