Partilhar via


Aviso C6392

Essa expressão grava o valor do ponteiro no fluxo. Se isso for intencional, adicione uma conversão explícita a 'void *'

A regra foi adicionada no Visual Studio 2022 17.8.

Comentários

O C++ dá suporte a fluxos de caracteres largos, como std::wostringstream, e fluxos de caracteres não inteiros, como std::ostringstream. Tentar imprimir uma cadeia de caracteres larga em um fluxo não inteiro chama a sobrecarga void* de operator<<. Essa sobrecarga imprime o endereço da cadeia de caracteres larga em vez do valor.

Nome de análise de código: STREAM_OUTPUT_VOID_PTR

Exemplo

O seguinte snippet de código imprime o valor do ponteiro para a saída padrão em vez da cadeia de caracteres "Pear":

#include <iostream>

int main() {
    std::cout << L"Pear\n"; // Warning: C6392
}

Há várias maneiras de corrigir esse erro. Se a impressão do valor do ponteiro não for intencional, use uma cadeia de caracteres não larga:

#include <iostream>

int main() {
    std::cout << "Pear\n"; // No warning.
}

Como alternativa, use um fluxo largo:

#include <iostream>

int main() {
    std::wcout << L"Pear\n"; // No warning.
}

Se o comportamento for intencional, torne a intenção explícita e silencie o aviso usando uma conversão explícita:

#include <iostream>

int main() {
    std::cout << static_cast<void*>(L"Pear\n"); // No warning.
}