获取结构填充字节的地址

时间:2015-10-15 10:00:18

标签: c struct padding

我很想知道结构填充中填充字节中包含的值。

所以我写了下面的代码,但递增指针将指向下一个结构成员。我们如何访问填充的内存位置?

#include <stdio.h>

struct /* __attribute__((__packed__))*/ test{
        int a;
        char b;
        int c;
};

 main(){
        struct test a;
        a.a = 10;
        a.b = 's';
        a.c = 15;

        printf("%d\n",sizeof(a));
        printf("address of first int is: %p \n",(void *)&a.a);
        printf("address of the first char is : %p\n",(void *)&a.b);
        printf("address of the second int is : %p\n",(void *)&a.c);

        printf("the value of char is: %c\n", a.b);

        int *p;
        p = (void *) &a.b;
        printf("%p\n",p);
        p++;
        printf("the value in the padded place is: %d\n",*p);

        return 0;
}

1 个答案:

答案 0 :(得分:4)

您可以使用const unsigned char *

void print_hex(const void *data, size_t size)
{
  const unsigned char *src = data;
  while (size > 0)
  {
    printf("%02x ", *src++);
    --size;
  }
  printf("\n");
}

像这样使用:

struct test a = { 10, 's', 15 };
print_hex(&a, sizeof a);