Sdílet prostřednictvím


Upozornění C6392

Tento výraz zapíše hodnotu ukazatele na datový proud. Pokud je to úmyslné, přidejte explicitní přetypování na void *.

Toto pravidlo bylo přidáno v sadě Visual Studio 2022 17.8.

Poznámky

Jazyk C++ podporuje široké datové proudy znaků, jako std::wostringstreamjsou , a neplošné datové proudy znaků, například std::ostringstream. Pokus o tisk širokého řetězce do neplošného datového proudu volá void* přetížení operator<<. Toto přetížení vytiskne adresu širokého řetězce místo hodnoty.

Název analýzy kódu: STREAM_OUTPUT_VOID_PTR

Příklad

Následující fragment kódu vytiskne hodnotu ukazatele na standardní výstup místo řetězce "Pear":

#include <iostream>

int main() {
    std::cout << L"Pear\n"; // Warning: C6392
}

Existuje několik způsobů, jak tuto chybu opravit. Pokud je tisk hodnoty ukazatele nezamýšlený, použijte neplošný řetězec:

#include <iostream>

int main() {
    std::cout << "Pear\n"; // No warning.
}

Případně použijte široký stream:

#include <iostream>

int main() {
    std::wcout << L"Pear\n"; // No warning.
}

Pokud je chování záměrné, explicitně umlčte upozornění pomocí explicitního přetypování:

#include <iostream>

int main() {
    std::cout << static_cast<void*>(L"Pear\n"); // No warning.
}