Partilhar via


C6053

C6053 de aviso: a chamada a <function> zero não pode finalizar a cadeia de caracteres <variable>

Este aviso indica que a função especificada foi chamada de forma que a cadeia de caracteres resultante não pode ser zero finalizada.Este empecilho pode causar um estouro de buffer aproveitável ou falhar.Esse erro é gerado também se uma função anotada espera que uma cadeia de caracteres finalizada zero é passada uma cadeia de caracteres que não é finalizada nula.

Funções de manipulação a maioria de biblioteca C e de cadeia de caracteres padrão do Win32 exigem e geram cadeias de caracteres terminadas zero.Alguns “funções de cadeia de caracteres após strncpy” (incluindo, wcsncpy, _mbsncpy, _snprintf, e snwprintf) não geram cadeias de caracteres em zero terminadas se preenchem exatamente o buffer.Em esse caso, uma chamada subseqüente para uma função de cadeia de caracteres que espera uma cadeia de caracteres zero finalizada irá além do final do buffer procurando o zero.O programa deve certificar-se que a cadeia de caracteres termina com um zero.Em geral, você deve passar um comprimento “na função de uma cadeia de caracteres após de” menor que o tamanho do buffer e então explicitamente atribuir zero para o caractere mais recente em buffer.

Exemplo

O seguinte exemplo de código gera este aviso:

#include <string.h>
#define MAX 15

size_t f( )
{
  char szDest[MAX];
  char *szSource="Hello, World!";

  strncpy(szDest, szSource, MAX);  
  return strlen(szDest); // possible crash here
}

Para corrigir este aviso, zero finalizar a cadeia de caracteres conforme mostrado no código de exemplo a seguir:

#include <string.h>
#define MAX 15

size_t f( )
{
  char szDest[MAX];
  char *szSource="Hello, World!";

  strncpy(szDest, szSource, MAX-1);
  szDest[MAX-1]=0;
  return strlen(szDest);
}

O seguinte exemplo de código corrigir este aviso usando a função segura de strncpy_s de manipulação de cadeia de caracteres:

#include <string.h>
#define MAX 15

size_t f( )
{
  char szDest[MAX];
  char *szSource= "Hello, World!";

  strncpy_s(szDest, sizeof(szDest), szSource, strlen(szSource));  
  return strlen(szDest);
}

Você deve observe que esse aviso é relatado às vezes em determinados linguagem garantidos para estar seguro na prática.Devido às conseqüências da freqüência e potenciais de este empecilho, a ferramenta de análise é inclinada em favor de encontrar problemas potenciais em vez de sua polarização comum para reduzir ruído.

Consulte também

Referência

strncpy_s, _strncpy_s_l, wcsncpy_s, _wcsncpy_s_l, _mbsncpy_s, _mbsncpy_s_l

Outros recursos

Visão geral de anotação

NullTerminated