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::wostringstreamz. B. , und nicht breite Zeichenströme wie std::ostringstreamz. 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.
}