Ваша программа не преобразует прочитанную строку в значение указателя.Вы просто печатаете первый символ, введенный пользователем.
Вы можете прочитать значения указателя из потока с помощью scanf("%p", &p);
:
7.21.6.2 fscanf
function
...
p
Соответствует определенному реализацией набору последовательностей, который должен совпадать с набором последовательностей, которые могут быть получены преобразованием% pфункции fprintf
.Соответствующий аргумент должен быть указателем на указатель на void.Элемент ввода преобразуется в значение указателя в зависимости от реализации.Если входной элемент представляет собой значение, преобразованное ранее во время выполнения той же программы, полученный в результате указатель должен сравниться с этим значением;в противном случае поведение преобразования %p
не определено.
Вот модифицированная версия вашей программы:
#include <stdio.h>
void getTheValue(void);
int main() {
void *address;
char num[] = "ab";
address = num;
printf("Address of num: %p\n", address);
getTheValue();
getchar();
return 0;
}
void getTheValue(void) {
void *p;
printf("Enter the address: ");
scanf("%p", &p);
printf("address = %p\n", p);
unsigned char *ptr;
ptr = p;
printf("The value at address = `%c`, decimal %d, hex 0x%02x\n", *ptr, *ptr, *ptr);
}
Трассировка:
~/dev/stackoverflow > ./peek
Address of num: 0x7fff5101e94c
Enter the address: 0x7fff5101e94d
address = 0x7fff5101e94d
The value at address = `b`, decimal 98, hex 0x62