Warnung C6392
Dieser Ausdruck schreibt den Wert des Zeigers in den Datenstrom. Wenn dies beabsichtigt ist, fügen Sie eine explizite Umwandlung zu „void *“ hinzu.
Diese Regel wurde in Visual Studio 2022 17.8 hinzugefügt.
Hinweise
C++ unterstützt breite Zeichenströme wie std::wostringstream
z. B. , und nicht breite Zeichenströme wie std::ostringstream
z. B. . Beim Versuch, eine breite Zeichenfolge in einen nicht breiten Datenstrom zu drucken, wird die void*
Überladung von operator<<
. Diese Überladung druckt die Adresse der breiten Zeichenfolge anstelle des Werts.
Name der Codeanalyse: STREAM_OUTPUT_VOID_PTR
Beispiel
Der folgende Codeausschnitt druckt den Wert des Zeigers auf die Standardausgabe anstelle der Zeichenfolge "Pear"
:
#include <iostream>
int main() {
std::cout << L"Pear\n"; // Warning: C6392
}
Es gibt mehrere Möglichkeiten, diesen Fehler zu beheben. Wenn der Zeigerwert unbeabsichtigt gedruckt wird, verwenden Sie eine nicht zeichenfolge:
#include <iostream>
int main() {
std::cout << "Pear\n"; // No warning.
}
Alternativ können Sie einen breiten Stream verwenden:
#include <iostream>
int main() {
std::wcout << L"Pear\n"; // No warning.
}
Wenn das Verhalten beabsichtigt ist, machen Sie die Absicht explizit und stillen Sie die Warnung, indem Sie eine explizite Umwandlung verwenden:
#include <iostream>
int main() {
std::cout << static_cast<void*>(L"Pear\n"); // No warning.
}