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::wostringstream
jsou , 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.
}