2010-11-24 9 views
1

Ich habe einen Zeiger, und ich möchte die Zeigeradresse in eine Zeichenfolge konvertieren und die Adresse in einem Meldungsfeld anzeigen. Gibt es eine ähnliche Funktion wie printf(), die einen String formatieren kann? Das scheint nicht zu funktionieren.Format Zeichenfolge C++

#include <windows.h> 
#include <stdio.h> 

int WINAPI WinMain(
    HINSTANCE hThisInstance, 
    HINSTANCE prevInstance, 
    LPSTR lpszArgument, 
    int nFunsterStil) 
{ 
    int x = 5; 
    int* ptr = &x; 

    MessageBox(NULL, printf("%p", ptr), "Pointer", MB_OK); 
    return 0;  
} 

Danke für jede Hilfe.

+0

sollte nicht '* ptr' sei 'ptr'? – Naveen

+0

Sorry ja sollte es. –

Antwort

4

Verwenden Sie entweder sprintf (oder wie jemand anders vorgeschlagen hat, desto sicherer snprintf), um zuerst den Zeiger auf einen Puffer zu drucken oder besser noch stringstream, um den Zeiger in eine Zeichenfolge zu setzen.

stringstream tmp; 
tmp << ptr; 
MessageBox(NULL, tmp.str().c_str(), "Pointer", MB_OK); 
0

sprintf ist gut, aber snprintf ist besser

+0

Oder 'sprintf' ist schlecht,' snprintf' ist weniger schlecht;) –

+0

dann gibt es asprintf(), auf einigen Systemen ... –

1

prüfen std::ostringstream out:

#include <sstream> 

std::ostringstream oss; 
int a(5); 
std::string b("Hello!"); 

oss << "This is an example! " << a << ", so I will say " << b; 

// use oss.str() to return a string! 
1

wie eine Umwandlung Looks, die tun steigern kann: MessageBox(NULL, boost::lexical_cast<std::string>(&x).c_str(), "Pointer", MB_OK);