C6059
警告 C6059: <関数>. への呼び出しに不適切な長さのパラメーターがあります。<変数> のバッファー サイズではなく、残りの文字数を渡してください。
この警告は、文字列の連結関数の呼び出しが、連結する文字数に不適切な値を渡す可能性があることを示します。この問題によって、攻撃に利用される可能性のあるバッファー オーバーランまたはクラッシュが発生する場合があります。この問題の一般的な原因は、バッファー内の残りの文字数ではなく、バッファー サイズを文字列操作関数に渡すことです。
使用例
この警告が発生するコード例を次に示します。
#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