在C中打印void *变量

大家好我想用printf进行调试。 但我不知道如何打印“out”变量。

在返回之前,我想打印此值,但其类型为void *。

int hexstr2raw(char *in, void *out) { char c; uint32_t i = 0; uint8_t *b = (uint8_t*) out; while ((c = in[i]) != '\0') { uint8_t v; if (c >= '0' && c = 'A' && c = 'a' || c <= 'f') { v = 10 + c - 'a'; } else { return -1; } if (i%2 == 0) { b[i/2] = (v << 4); printf("c='%c' \tv='%u' \tb[i/2]='%u' \ti='%u'\n", c,v ,b[i/2], i);} else { b[i/2] |= v; printf("c='%c' \tv='%u' \tb[i/2]='%u' \ti='%u'\n", c,v ,b[i/2], i);} i++; } printf("%s\n", out); return i; } 

我能怎么做? 谢谢。

这个:

 uint8_t *b = (uint8_t*) out; 

暗示out实际上是指向uint8_t ,所以也许你想要打印实际存在的数据。 另请注意,您不需要在C中使用void *进行强制转换,因此强制转换非常无意义。

代码似乎是进行hex到二进制转换,将结果存储在out 。 您可以通过执行以下操作打印i生成的字节:

 int j; for(j = 0; j < i; ++j) printf("%02x\n", ((uint8_t*) out)[j]); 

指针值本身很少有趣,但您可以使用printf("%p\n", out);打印它printf("%p\n", out);%p格式说明符用于void *

 printf("%p\n", out); 

是打印(void*)指针的正确方法。

在C中使用printf打印void指针的格式说明符是%p 。 通常打印的是指针的hex表示(尽管标准简单地说它是定义指针​​的实现定义的字符序列)。