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