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::wostringstream
ad esempio , e flussi di caratteri non a livello, std::ostringstream
ad 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.
}