Condividi tramite


Avviso C6392

Questa espressione scrive il valore del puntatore nel flusso. Se questa operazione è intenzionale, aggiungere un cast esplicito a 'void *'

Questa regola è stata aggiunta in Visual Studio 2022 17.8.

Osservazioni:

C++ supporta flussi di caratteri wide, std::wostringstreamad esempio , e flussi di caratteri non a livello, std::ostringstreamad esempio . Il tentativo di stampare una stringa wide in un flusso non a livello chiama l'overload void* di operator<<. Questo overload stampa l'indirizzo della stringa wide anziché il valore.

Nome dell'analisi del codice: STREAM_OUTPUT_VOID_PTR

Esempio

Il frammento di codice seguente stampa il valore del puntatore all'output standard anziché alla stringa "Pear":

#include <iostream>

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

Esistono diversi modi per correggere l'errore. Se la stampa del valore del puntatore non è intenzionale, utilizzare una stringa non a livello:

#include <iostream>

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

In alternativa, usare un flusso wide:

#include <iostream>

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

Se il comportamento è intenzionale, rendere esplicita l'intenzione e disattivare l'avviso usando un cast esplicito:

#include <iostream>

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