다음을 통해 공유


C6384

경고 C6384: 포인터의 크기를 다른 값으로 나눕니다.

이 경고는 크기 계산이 잘못되었을 가능성이 있음을 나타냅니다. 배열의 요소 수를 계산할 때 배열의 크기를 첫 번째 요소의 크기로 나누는 경우가 있습니다. 하지만 배열이 실제로는 포인터인 경우 의도하지 않은 결과가 나타납니다.

포인터가 함수 매개 변수이고 버퍼의 크기가 전달되지 않은 경우에는 사용 가능한 최대 버퍼를 계산할 수 없습니다. 포인터가 로컬로 할당되는 경우 할당에 사용된 크기를 사용해야 합니다.

예제

다음 코드에서는 이 경고를 발생시킵니다.

#include <windows.h>
#include <TCHAR.h>

#define SIZE 15

void f( )
{
  LPTSTR dest = new TCHAR[SIZE];
  char src [SIZE] = "Hello, World!!";
  if (dest)
  {
    _tcsncpy(dest, src, sizeof dest  / sizeof dest[0]); 
  }
}

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

#include <windows.h>
#include <TCHAR.h>

#define SIZE 15

void f( )
{
  LPTSTR dest = new TCHAR[SIZE];
  char src [SIZE] = "Hello, World!!";
  if (dest)
  {
    _tcsncpy(dest, src, SIZE);
  }
}

안전한 문자열 함수 _tcsncpy_s를 사용하여 이 경고를 해결하려면 다음 코드를 사용합니다.

void f( )
{
  LPTSTR dest = new TCHAR[SIZE];
  char src [SIZE] = "Hello, World!!";
  if (dest)
  {
   _tcsncpy_s(dest, SIZE, src, SIZE);
  }
} 

참고 항목

참조

_mbsnbcpy_s, _mbsnbcpy_s_l

sizeof Operator