Avertissement C6392
Cette expression écrit la valeur du pointeur dans le flux. Si c’est intentionnel, ajoutez un cast explicite à 'void *'
Cette règle a été ajoutée dans Visual Studio 2022 17.8.
Notes
C++ prend en charge les flux de caractères larges tels que std::wostringstream
et les flux de caractères non larges tels que std::ostringstream
. Une tentative d’affichage d’une chaîne large dans un flux non large appelle la surcharge void*
de operator<<
. Cette surcharge affiche l’adresse de la chaîne large au lieu de la valeur.
Nom de l’analyse du code : STREAM_OUTPUT_VOID_PTR
Exemple
L’extrait de code suivant affiche la valeur du pointeur dans la sortie standard au lieu de la chaîne "Pear"
:
#include <iostream>
int main() {
std::cout << L"Pear\n"; // Warning: C6392
}
Il existe plusieurs moyens de corriger cette erreur. Si l’affichage de la valeur du pointeur n’est pas intentionnel, utilisez une chaîne non large :
#include <iostream>
int main() {
std::cout << "Pear\n"; // No warning.
}
Vous pouvez également utiliser un flux large :
#include <iostream>
int main() {
std::wcout << L"Pear\n"; // No warning.
}
Si le comportement est intentionnel, rendez explicite cette intention et mettez l’avertissement sous silence à l’aide d’un cast explicite :
#include <iostream>
int main() {
std::cout << static_cast<void*>(L"Pear\n"); // No warning.
}