Я пытаюсь преобразовать строку, такую как «0x7ffd01767a60» в шестнадцатеричный, чтобы я мог сравнивать указатели. Не уверен, что это лучшее решение.strtoul() работает не так, как ожидалось?
Я делаю это:
char *address = "0x7ffd01767a60";
strtol(address,NULL,16);
printf("%lp",address);
И я получаю это: 0x7ffd01764120
EDIT: Кажется, я печатал адрес строки, игнорируя возврат функции. Спасибо, Дженс! и schlenk.
РЕШЕННЫЙ! Это то, что я делаю
char *address = "0x7ffd01767a60";
void *p;
unsigned long int address_hex = strtol(address,NULL,16);
p = (void*) address_hex;
printf("%p",p);
printf печатает тот же адрес памяти.
Где вы снимаете результат [strtoul] (http://linux.die.net/man/3/strtoul)? Все, что вы здесь делаете, это напечатать указатель на строку '" 0x7ffd01767a60 ", которая отличается от содержимого строки. – Jens
Что вы ожидаете от этого? 'strtoul()' имеет возвращаемое значение, которое вы просто игнорируете. – schlenk
lol ... теперь я понял. Спасибо. Должен ли я использовать длинный int? – deko