2012-02-21 3 views
15

mam ten kod:Wyświetlanie adresu ciąg

char* hello = "Hello World"; 
std::cout << "Pointer value = " << hello << std::endl; 
std::cout << "Pointer address = " << &hello << std::endl; 

A oto wynik:

Pointer value = Hello World 
Pointer address = 0012FF74 

Kiedy debugowania do mojego programu przy OllyDbg, widzę, że wartość 0x0012FF74 jest np 0x00412374.

Czy mogę wydrukować rzeczywisty adres, na który wskazuje hello?

Odpowiedz

23

Jeśli użyjesz &hello, wypisze adres wskaźnika, a nie adres ciągu. Prześlij wskaźnik do void*, aby użyć prawidłowego przeciążenia operator<<.

std::cout << "Pointer address = " << static_cast<void*>(hello) << std::endl; 
4

nie mam kompilatora, ale prawdopodobnie następujące prace:

std::cout << "Pointer address = " << (void*) hello << std::endl; 

Powód: przy użyciu tylko cześć potraktuje to jako string (tablicy char), oddając go do pustki wyżeł będzie pokazane jako adres szesnastkowy.

2

lub tak:

std::cout << "Pointer address = " << &hello[0] << std::endl; 
0

Działa to również:

std::cout << "Pointer address = " << (int *)hello << std::endl; 
+0

należy dodać pewne wyjaśnienie, jak również, jeśli to możliwe. –

+1

Może to spowodować niezdefiniowane zachowanie, jeśli "hello" nie jest poprawnie ustawione dla 'int'. Biorąc pod uwagę, że wersja z 'void *' działa, nie ma powodu, aby z tego korzystać. –

Powiązane problemy