Drucken Sie die Adresse eines struct-Objekts
Ich habe eine struct
wie diese
typedef struct _somestruct {
int a;
int b;
}SOMESTRUCT,*LPSOMESTRUCT;
Erstelle ich ein Objekt für die struct
und versuchen, es zu drucken die Adresse wie folgt
int main()
{
LPSOMESTRUCT val = (LPSOMESTRUCT)malloc(sizeof(SOMESTRUCT));
printf("0%x\n", val);
return 0;
}
..und ich bekomme diese Warnung
Warnung C4313: 'printf' : '%x' in
format-string-Konflikte mit dem argument
1 des Typs 'LPSOMESTRUCT'
So, ich habe versucht zu werfen die Adresse int
wie diese
printf("0%x\n", static_cast<int>(val));
Aber ich bekomme diese Fehlermeldung:
error C2440: 'static_cast' : kann nicht
konvertieren von 'LPSOMESTRUCT' in 'int'
Was vermisse ich hier? Wie, diese Warnung zu vermeiden?
Dank.
InformationsquelleAutor bdhar | 2010-06-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
%x
erwartet unsigned. Was Sie drucken wollen, ist ein Zeiger. Zu tun korrekt, die Sie normalerweise verwenden möchten%p
. Zu pedantisch korrekt ist, dass erwartet einen Zeiger auf void, so dass Sie brauchen werden, um Sie zu wirken:In Wirklichkeit, die meisten aktuellen Implementierungen verwenden das gleiche format für alle Verweise, in welchem Fall der cast wird bedeutungslos. Natürlich, da die C++ - tag, die meisten der code, den Sie aufgenommen haben, wird fragwürdig (andere, als die Teile wie LPSOMESTRUCT, die fraglich sind unabhängig). In C++ können Sie in der Regel etwas mehr wollen wie:
InformationsquelleAutor Jerry Coffin
Verwenden Sie die %p-format-Bezeichner zu drucken, die einen Zeiger.
InformationsquelleAutor user85509
Wenn du wirken willst dann mit reinterpret_cast anstelle von static_cast könnte den trick tun hier.
Mit printf versuchen, mit den %zu anstelle von x %für das drucken aus einem Zeiger, weil der Zeiger von Ganzzahl ohne Vorzeichen (dh %zu).
Nur eine andere Sache, ein c++ - Programm gibt es einen Grund, warum Sie mit malloc statt new?
InformationsquelleAutor shuttle87
Als dieser gekennzeichnet ist C++, kann ich nur darauf hinweisen, dass Sie nicht brauchen, typedefs beim anlegen von structs in dieser Sprache:
werden sollte:
Außerdem ist es von vielen als schlechte Praxis zu erstellen Typdefinitionen wie LPSOMESTRUCT, die das verbergen der Tatsache, dass ein Typ ist ein Zeiger.
InformationsquelleAutor