Поделиться через


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