Partilhar via


C6059

Aviso C6059: Comprimento incorreto do parâmetro na telefonar para <função>.Passa o número de caracteres restantes, não o dimensionar do buffer de <variável>

Este aviso indica que uma telefonar para uma função de concatenação de seqüência de caracteres provavelmente está passando um valor incorreto para o número de caracteres para concatenar.Esse defeito pode causar uma saturação de buffer explorável ou falhar.Uma causa comum desse defeito está passando o dimensionar do buffer, em vez do número de caracteres no buffer para a função de manipulação de seqüência de caracteres restante.

Exemplo

O código a seguir gera este aviso:

#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 ...                                 
}

Para corrigir esse aviso, use o número correto de caracteres para concatenar sistema autônomo mostra o código a seguir:

#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 ...                                 
}

Para corrigir esse aviso usando a função de manipulação de seqüência segura, consulte o seguinte código:

#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;
}

Consulte também

Referência

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