C6276
경고 C6276: 의미 체계가 다른 문자열 형식 간의 캐스팅입니다. char*를 wchar_t*로 캐스팅했습니다.잘못된 문자열을 사용하면 정의되지 않은 동작이 발생할 수 있습니다.
이 경고는 ANSI 문자열(char_t*)을 UNICODE 문자열(wchar_t *)로 잘못 캐스팅했을 가능성이 있음을 나타냅니다.UNICODE 문자열의 문자 크기는 2바이트이기 때문에 이렇게 캐스팅하면 올바르게 종료되지 않는 문자열이 만들어질 수 있습니다.이러한 문자열을 함수의 wcs* 라이브러리에 사용하면 버퍼 오버런 및 액세스 위반이 발생할 수 있습니다.
예제
다음 코드에서는 이 경고를 발생시킵니다.
#include <windows.h>
VOID f()
{
WCHAR szBuffer[8];
LPWSTR pSrc;
pSrc = (LPWSTR)"a";
wcscpy(szBuffer, pSrc);
}
다음 코드에서는 문자 L을 추가하여 ASCII 문자를 와이드 문자로 나타냄으로써 이 경고를 해결합니다.
#include <windows.h>
VOID f()
{
WCHAR szBuffer[8];
LPWSTR pSrc;
pSrc = L"a";
wcscpy(szBuffer, pSrc);
}
다음 코드에서는 이 경고를 해결하기 위해 안전한 문자열 조작 함수 wcscpy_s를 사용합니다.
#include <windows.h>
VOID f()
{
WCHAR szBuffer[8];
LPWSTR pSrc;
pSrc = L"a";
wcscpy_s(szBuffer,8,pSrc);
}