指针增量没有给出正确的值,它指向不确定的地址。
想知道为什么*p++= <value>
没有指向我想要的值,而是指向其他
我的代码:
void run_exe() {
int i;
uint8_t buf[20] = {"0"};
uint8_t *p = NULL;
uint8_t tx_buf[4] = {1,1,1,1};
p = buf;
*p++ = 0x14;
*p++ = 0x20;
*p++ = 0x30;
*p++ = 0x40;
*p++ = 0x50;
*p++ = 0x60;
memcpy( p+6, tx_buf, sizeof(tx_buf));
// ARRAY_SIZE: is the macro just my array length.
for (i = 0; i < ARRAY_SIZE(buf); i++) {
printf("%d ", *(p+i));
}
}
我正在打印HEX的十进制值,但至少我期待正确的值,但我得到了不确定的值。
我期待这样的输出。
14 20 30 40 50 60 1 1 1 1 0 0 0 0 0 0 0 0 0
输出:
0 0 0 0 0 0 1 1 1 1 0 0 0 0 255 127 0 0 0
答案 0 :(得分:4)
你需要一个辅助指针,
uint8_t *ptr;
p = buf;
ptr = p;
*p++ = 0x14;
依此类推,因为++
会修改指针的值。
然后,
for (i = 0; i < ARRAY_SIZE(buf); i++) {
printf("%d ", ptr[i]);
}
++
后增量或预增量运算符,在评估表达式后使指针p
指向p + 1
,因此p
是当您尝试打印时,指向buf
。
编辑:当然你也可以这样做,
for (i = 0; i < ARRAY_SIZE(buf); i++) {
printf("%d ", buf[i]);
}
但我认为最初的答案解释了重要的原因。
EXTRA :另外,我99.9%肯定这是错误的
uint8_t buf[20] = {"0"};
你的意思,
uint8_t buf[20] = {0};
你的编译器可能会向你显示这个有问题的初始化的警告,因为"0"
有指针类型,即使它可以转换为整数类型,它大多肯定不适合一个uint8_t
所以你有一个溢出问题。