다음을 통해 공유


C6059

경고 C6059: <function>에 대한 호출에서 길이 매개 변수가 잘못되었습니다.<variable>의 버퍼 크기가 아니라 남은 문자 수를 전달하십시오.

이 경고는 문자열 연결 함수를 호출할 때 연결할 문자 수에 대해 올바르지 않은 값을 전달할 수 있음을 나타냅니다.이 오류로 인해 악용될 수 있는 버퍼 오버런이나 충돌이 발생할 수 있습니다.이 오류는 일반적으로 버퍼에 있는 나머지 문자 수 대신 버퍼 크기를 문자열 조작 함수에 전달하기 때문에 발생합니다.

예제

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

#include <string.h>
#define MAX 25

void f( )
{
  char szTarget[MAX];
  char *szState ="Washington";
  char *szCity="Redmond, ";

  strncpy(szTarget,szCity, MAX);
  szTarget[MAX -1] = '\0';
  strncat(szTarget, szState, MAX); //wrong size 
  // code ...                                 
}

이 경고를 해결하려면 다음 코드에서처럼 연결할 정확한 문자 수를 사용합니다.

#include <string.h>
#define MAX 25

void f( )
{
  char szTarget[MAX];
  char *szState ="Washington";
  char *szCity="Redmond, ";

  strncpy(szTarget,szCity, MAX);
  szTarget[MAX -1] = '\0';
  strncat(szTarget, szState, MAX - strlen(szTarget)); // correct size 
  // code ...                                 
}

안전한 문자열 조작 함수를 사용하여 이 경고를 해결하려면 다음 코드를 참조하십시오.

#include <string.h>

void f( )
{
  char *szState ="Washington";
  char *szCity="Redmond, ";

  size_t nTargetSize = strlen(szState) + strlen(szCity) + 1;
  char *szTarget= new char[nTargetSize];

  strncpy_s(szTarget, nTargetSize, szCity,strlen(szCity));
  strncat_s(szTarget, nTargetSize, szState,
                    nTargetSize - strlen(szTarget));
  // code ...
  delete [] szTarget;
}

참고 항목

참조

strncpy_s, _strncpy_s_l, wcsncpy_s, _wcsncpy_s_l, _mbsncpy_s, _mbsncpy_s_l

strncat_s, _strncat_s_l, wcsncat_s, _wcsncat_s_l, _mbsncat_s, _mbsncat_s_l