Печать переменной void * в C

Привет всем Я хочу сделать отладку с printf. Но я не знаю, как напечатать переменную «out».

Перед возвратом я хочу напечатать это значение, но его тип недействителен *.

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; 

подразумевает, что на самом деле это указатель на uint8_t , поэтому, возможно, вы хотите распечатать данные, которые на самом деле есть. Также обратите внимание, что вам не нужно бросать из void * в C, поэтому отливка действительно бессмысленна.

Кажется, что код выполняет шестнадцатеричное преобразование в двоичном формате, сохраняя результаты. Вы можете напечатать сгенерированные байты i , выполнив:

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

Значение самого указателя редко интересно, но вы можете распечатать его с помощью printf("%p\n", out); , Спецификатор форматирования %p для void * .

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

это правильный способ печати указателя (void*) .

Спецификатор формата для печати указателей void с использованием printf в C равен %p . То, что обычно печатается, представляет собой шестнадцатеричное представление указателя (хотя стандарт говорит просто, что это определенная реализация последовательность символов, определяющая указатель).