Ostrzeżenie C6392
To wyrażenie zapisuje wartość wskaźnika do strumienia. Jeśli jest to zamierzone, dodaj jawne rzutowanie do "void *"
Ta reguła została dodana w programie Visual Studio 2022 17.8.
Uwagi
Język C++ obsługuje strumienie znaków szerokich, takie jak , i strumienie znaków, takie jak std::wostringstream
std::ostringstream
. Próba wydrukowania szerokiego ciągu w strumieniu niewidomym wywołuje void*
przeciążenie elementu operator<<
. To przeciążenie wyświetla adres szerokiego ciągu zamiast wartości.
Nazwa analizy kodu: STREAM_OUTPUT_VOID_PTR
Przykład
Poniższy fragment kodu wyświetla wartość wskaźnika do standardowych danych wyjściowych zamiast ciągu "Pear"
:
#include <iostream>
int main() {
std::cout << L"Pear\n"; // Warning: C6392
}
Istnieje wiele sposobów naprawienia tego błędu. Jeśli drukowanie wartości wskaźnika jest niezamierzone, użyj ciągu innego niżwide:
#include <iostream>
int main() {
std::cout << "Pear\n"; // No warning.
}
Alternatywnie użyj szerokiego strumienia:
#include <iostream>
int main() {
std::wcout << L"Pear\n"; // No warning.
}
Jeśli zachowanie jest zamierzone, ustaw intencję jawną i wycisz ostrzeżenie przy użyciu jawnego rzutowania:
#include <iostream>
int main() {
std::cout << static_cast<void*>(L"Pear\n"); // No warning.
}