Share via


C6209

경고 C6209: <function>에 대한 호출에서 'sizeof<variable1>'을(를) 매개 변수 <number>(으)로 사용합니다. <variable2>은(는) 와이드 문자 배열일 수 있습니다. 바이트 수 대신 문자 수를 사용하려고 했습니까?

이 경고는 함수 호출에 대한 매개 변수가 문자 수가 아니라 바이트 수로 잘못 지정되었을 수 있음을 나타냅니다. 이 경우 이 오류로 인해 보안 허점이 발생할 수도 있지만 메모리 손상이나 프로그램 충돌이 발생할 가능성이 높습니다.

이 오류의 일반적인 원인은 문자 배열에 sizeof를 사용했기 때문입니다. sizeof 연산자는 항상 바이트 수를 계산합니다. ANSI 문자의 경우 바이트 수가 문자 수와 동일하지만 유니코드 문자의 경우에는 바이트 수가 문자 수의 두 배입니다.

일반적으로 배열의 크기를 각 요소의 크기로 나누어서 배열에 있는 요소의 수를 계산하는 것이 안전합니다.

이 경고는 다음과 같은 경우에 생성됩니다.

  • 변수가 한 매개 변수로 전달되고 해당 변수의 sizeof가 다른 매개 변수로 전달되는 경우

  • 변수 형식과 정식 매개 변수 형식이 모두 와이드 문자에 대한 다양한 포인터인 경우

예제

다음 샘플 코드에서는 sizeof pC가 my_wcsncpy 함수에 전달되므로 이 경고가 생성됩니다.

#include<windows.h>
extern void my_wcsncpy(wchar_t *, wchar_t *, size_t);

void f( )
{
  WCHAR pC[15];
  wchar_t* input = L"Hello, World!";
  
  my_wcsncpy(pC, input, sizeof pC);
  // code ...
}

이 경고를 해결하려면 다음 코드에서처럼 올바른 크기를 전달합니다.

#include<windows.h>
extern void my_wcsncpy(wchar_t *, wchar_t *, size_t);

void f( )
{
  WCHAR pC[15];
  wchar_t* input = L"Hello, World!";
  
  my_wcsncpy(pC, input, (sizeof pC) / (sizeof pC[0]));
  // code ...
}

특정 코딩 스타일의 경우에는 사용된 휴리스틱이 올바르지 않을 수 있습니다. 따라서 이 경고는 코드의 실제 오류에 해당하지 않을 수 있습니다.

참고 항목

참조

sizeof Operator

sizeof Operator (C)