Udostępnij za pośrednictwem


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::wostringstreamstd::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.
}