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