C6057
경고 C6057: <function>에 대한 호출에서 문자 수/바이트 수가 일치하지 않아 버퍼 오버런이 발생했습니다.
이 경고는 문자 수가 필요한 함수에 바이트 수가 대신 전달된다는 것을 나타냅니다. 와이드(유니코드) 문자의 경우 값이 서로 다릅니다. 이 오류로 인해 악용될 수 있는 버퍼 오버런이나 충돌이 발생할 수 있습니다.
이 오류의 일반적인 원인은 문자 배열에 sizeof를 사용했기 때문입니다. sizeof 연산자는 항상 바이트 수를 계산합니다. ANSI 문자의 경우 바이트 수가 문자 수와 동일하지만 유니코드 문자의 경우 바이트 수는 문자 수의 두 배입니다.
일반적으로 배열의 크기를 각 요소의 크기로 나누어서 배열에 있는 요소의 수를 계산하는 것이 안전합니다.
예제
다음 코드에서는 유니코드 문자 집합을 사용하여 컴파일된 경우 이 경고를 발생시킵니다.
#include<tchar.h>
#include<windows.h>
void f( HINSTANCE hInst, UINT uID )
{
TCHAR buff[128];
if ( LoadString ( hInst, uID, buff, sizeof buff ) ) // warning C6057
{
// code...
}
}
이 경고를 해결하려면 다음 코드에서처럼 배열의 크기를 요소의 크기로 나눕니다.
#include<tchar.h>
#include<windows.h>
void f(HINSTANCE hInst,UINT uID)
{
TCHAR buff[128];
if( LoadString ( hInst, uID, buff, (sizeof buff)/(sizeof buff[0]) ) )
{
// code...
}
}
Visual C++에서 유니코드 문자를 사용하는 방법에 대한 자세한 내용은 일반 속성 페이지(프로젝트)를 참조하십시오. LoadString에 대한 자세한 내용은 LoadString Function을 참조하십시오.