Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Tento výraz zapíše hodnotu ukazatele na datový proud. Pokud je to úmyslné, přidejte explicitní přetypování na void *.
Poznámky
Toto pravidlo bylo přidáno v sadě Visual Studio 2022 17.8.
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.
}