指针增量没有给出正确的值,它指向不确定的地址。
想知道为什么*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
最佳答案
你需要一个辅助指针,
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
NOT 指向 buf
。
编辑:当然你也可以这样做,
for (i = 0; i < ARRAY_SIZE(buf); i++) {
printf("%d ", buf[i]);
}
但我认为原始答案解释了重要的原因。
额外:此外,我 99.9% 确定这是错误的
uint8_t buf[20] = {"0"};
你的意思是,
uint8_t buf[20] = {0};
您的编译器可能会向您显示此错误初始化的警告,因为 "0"
具有指针类型,即使它可以转换为整数类型,它也肯定不适合uint8_t
所以那里有溢出问题。
关于c - 在指针递增时没有得到预期的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45939778/