다음을 통해 공유


경고 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
}

이 오류를 해결하는 방법에는 여러 가지가 있습니다. 포인터 값 인쇄를 의도하지 않은 경우 nonwide 문자열을 사용합니다.

#include <iostream>

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

또는 wide 스트림을 사용합니다.

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