Compartir a través de


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