打印出值uint8_t *

use*_*726 4 c

以下是我的摘录:

typedef struct{
   uint8_t dstEndpt;
   uint16_t srcEndpt;
   uint8_t * quality;
} DataIndT;

DataIndT * dataIndPtr;

printf("dstEndpt: 0x%02x", dataIndPtr->dstEndpt); <-- print out the value of dstEndpt

printf("dstEndpt: 0x%04x", dataIndPtr->srcEndpt); <-- print out the value of srcEndpt
Run Code Online (Sandbox Code Playgroud)

但是,如何打印出值quality

gio*_*gim 6

但是,如何打印质量值?

你做

printf("%p", (void*) dataIndPtr->quality);
Run Code Online (Sandbox Code Playgroud)

由于指针的值是指针指向的对象的地址,因此将打印地址。


在这种情况下,要打印指针指向的对象,可以使用C99可用的格式说明符(也需要包含inttypes.h)。当然,您还需要取消引用指针:

printf("%" PRIu8 "\n", *(dataIndPtr->quality));
Run Code Online (Sandbox Code Playgroud)

因为quality是指向uint8_t

printf("%" PRIu16 "\n", *(dataIndPtr->srcEndpt));
Run Code Online (Sandbox Code Playgroud)

用于uint16_t类型。


wal*_*876 3

quality是一个指针,或者像一个数组,如果你想打印指向的值,你需要指定它。使用索引或取消引用它:

printf("quality: %d", *(dataIndPtr->quality));
Run Code Online (Sandbox Code Playgroud)

使用零索引(就像它是一个数组一样)也应该打印该值:

printf("quality: %d", dataIndPtr->quality[0]);
Run Code Online (Sandbox Code Playgroud)

或者,如果您想要打印指针本身的值,那么 Michal 的答案就是您想要的。

  • @这是*一个*正确的说明符。无需重复我们上次的争论,“%x”可用于任何比“int”窄的类型的非负值,因为它们经历了默认参数提升。实际上,这是一个不错的选择,因为某些库不支持 C99 中添加的修饰符 (2认同)