Imprime el valor uint8_t *

Los siguientes son mi fragmento:

typedef struct{ uint8_t dstEndpt; uint16_t srcEndpt; uint8_t * quality; } DataIndT; DataIndT * dataIndPtr; printf("dstEndpt: 0x%02x", dataIndPtr->dstEndpt); srcEndpt); <-- print out the value of srcEndpt 

Sin embargo, ¿cómo puedo imprimir el valor de la quality ?

quality es un puntero, o como una matriz, si desea imprimir el valor que apunta a que necesita especificarlo. Con el índice o desreferenciación:

 printf("quality: %d", *(dataIndPtr->quality)); 

Usar el índice cero como si fuera una matriz también debería imprimir el valor:

 printf("quality: %d", dataIndPtr->quality[0]); 

O si lo que desea es imprimir el valor del puntero, la respuesta de Michal es lo que desea.

Para imprimir el valor de un puntero, use %p :

 printf("dstEndpt: %p", (void*)dataIndPtr->quality); 

Sin embargo, ¿cómo puedo imprimir el valor de la calidad?

Tú lo haces

 printf("%p", (void*) dataIndPtr->quality); 

Esto imprimirá la dirección, ya que el valor del puntero es la dirección a la que apunta el puntero.


Para imprimir el objeto al que apunta el puntero, en este caso, puede usar los especificadores de formato disponibles para C99 (también debe incluir inttypes.h ). Por supuesto, también es necesario desreferenciar el puntero:

 printf("%" PRIu8 "\n", *(dataIndPtr->quality)); 

ya que la quality es puntero a uint8_t o

 printf("%" PRIu16 "\n", *(dataIndPtr->srcEndpt)); 

para los tipos uint16_t .

Como @Giorgi señaló, puedes usar inttypes.h .

Aquí hay un pequeño ejemplo:

 #include  #include int main(void){ uint8_t a = 0; uint16_t b = 0; uint32_t c = 0; uint64_t d = 0; printf("%" PRId8 "\n", a); printf("%" PRIu16 "\n",b); printf("%" PRIu32 "\n", c); printf("%" PRIu64 "\n", d); return 0; }