다음을 통해 공유


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); 
}