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