警告 C6392

此表达式将指针的值写入流。 如果这是有意的,请添加一个显式强制转换到 'void *'

此规则是在 Visual Studio 2022 17.8 中添加的。

注解

C++ 支持宽字符流(如 std::wostringstream)和非宽字符流(如 std::ostringstream)。 尝试将宽字符串打印到非宽流时,会调用 operator<<void* 重载。 此重载会打印宽字符串的地址,而不是值。

代码分析名称:STREAM_OUTPUT_VOID_PTR

示例

以下代码片段会将指针的值打印到标准输出,而不是字符串 "Pear"

#include <iostream>

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

有多种方法可以修复此错误。 如果意外打印了指针值,请使用非宽字符串:

#include <iostream>

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

或者,使用宽流:

#include <iostream>

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

如果行为是有意的,请使用显式强制转换使意向明确并静默警告:

#include <iostream>

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