指针的值显示不正确

时间:2019-06-18 19:47:01

标签: c ubuntu-16.04

我尝试将一些信息分配给'char'数据(一种结构和一个整数值),但是在分配它之后,我无法将其读回。有什么办法吗?我在安装在virtualbox上的Ubuntu 16.04上工作

struct opcode_struct{
    uint8_t a;
    uint8_t b;
    uint8_t c;
    uint8_t d;
};

union opcode{
    uint32_t uint32code;
    struct opcode_struct code;
};

struct request{
    //4
    union opcode opc;
    //4
    uint32_t id;
};


int main()
{
    char *buff = (char*)malloc(32);

    struct request rq = {0x00000001, 0}, *ptr_rq = &rq;
    int val = 512, *ptr_int = &val;

    memcpy(buff, ptr_rq, sizeof(rq));
    memcpy((buff+sizeof(rq)), ptr_int, sizeof(int));

    printf("Request opcode: 0x%08x\n", *buff);
    printf("Request id: %d\n", *(buff+sizeof(uint32_t)));
    printf("Int value: %d\n", *(buff+sizeof(rq)));

    free(buff);
    return 0;
}

显示的文字: 要求操作码:0x00000001 要求编号:0 整数值:0

但Int值应等于“ 512”

1 个答案:

答案 0 :(得分:0)

您要取消引用buff+sizeof(rq),即char *。由于512是0x 02 00,因此如果将其取消引用为char *,则会得到0x00。如果您查看buff+sizeof(rq) + 1,则会得到另一个0x02

另一方面,如果将指针投射到int *,则将获得完整的0x0200

printf("Int value: %d\n", *(int *)(buff+sizeof(rq)));

输出512。