次の方法で共有


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