Partager via


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