-1

我从'atoi'函数得到整数数据。

char value[20];
scanf("%s %s", temp1, value);
int integer_val = atoi(value);

我尝试将这些数据按 1 字节按 1 字节分配到堆内存中。并按 1 个字节打印。(使用通用数据类型)

void *mem = malloc(300);
memset(mem, NULL, 300);
for(int j = 0; j < 4; ++j){
    *(char *)(mem+j) = *(char *)(&integer_val + j);
    const char *buffer = mem;
    printf("%02x\n", buffer[j] & 0xff);
}

当 scanf 读取

abc 10

我预测终端打印

0a
00
00
00

但它确实打印:

0a
00
a0
f9

为什么 ?什么是 a0 fp ...?T_T

4

1 回答 1

1

&integer_val + j正在向 中添加一个整数int*。这将使指针前进 的大小int并将其移动到超出范围。

要将指针仅移动一个字节,它应该是(char*)&integer_val + j.

于 2021-05-04T12:50:49.300 回答