Advertencia C6392
Esta expresión escribe el valor del puntero a la secuencia. Si esto es intencionado, agregue una conversión explícita a "void*"
Esta regla se agregó en Visual Studio 2022 17.8.
Comentarios
C++ admite secuencias de caracteres anchos, como std::wostringstream
, y secuencias de caracteres no anchos, como std::ostringstream
. Al intentar imprimir una cadena ancha en una secuencia que no es ancha, se llama a la sobrecarga void*
de operator<<
. Esta sobrecarga imprime la dirección de la cadena ancha en lugar del valor.
Nombre de análisis de código: STREAM_OUTPUT_VOID_PTR
Ejemplo
El siguiente fragmento de código imprime el valor del puntero a la salida estándar en lugar de a la cadena "Pear"
:
#include <iostream>
int main() {
std::cout << L"Pear\n"; // Warning: C6392
}
Hay varias maneras de corregir este error. Si imprimir el valor del puntero no es intencionado, use una cadena que no sea ancha:
#include <iostream>
int main() {
std::cout << "Pear\n"; // No warning.
}
Como alternativa, use una secuencia ancha:
#include <iostream>
int main() {
std::wcout << L"Pear\n"; // No warning.
}
Si el comportamiento es intencionado, haga que la intención sea explícita y silencie la advertencia mediante una conversión explícita:
#include <iostream>
int main() {
std::cout << static_cast<void*>(L"Pear\n"); // No warning.
}