C6053C6053

advertencia C6053: la llamada a <función > puede no finalice en cero cadena <variable >warning C6053: call to <function> may not zero-terminate string <variable>

Esta advertencia indica que la función especificada se ha llamado de forma que la cadena resultante puede no ser terminadas en cero.This warning indicates that the specified function has been called in such a way that the resulting string might not be zero-terminated. Este defecto podría provocar una saturación del búfer explotable o un bloqueo.This defect might cause an exploitable buffer overrun or crash. También se genera esta advertencia si una función anotada que espera una cadena terminada en null se pasa una cadena que no sea null terminada.This warning is also generated if an annotated function expects a null terminated string is passed a string that is not null terminated.

Mayoría de biblioteca estándar de C y controlar funciones de cadena de Win32 requieren y producen cadenas terminadas en cero.Most C standard library and Win32 string handling functions require and produce zero-terminated strings. Algunas funciones de "cadena contada" (incluidos strncpy, wcsncpy, _mbsncpy, _snprintf, y snwprintf) no producen cadenas terminadas en cero si llenan exactamente su búfer.A few 'counted string' functions (including strncpy, wcsncpy, _mbsncpy, _snprintf, and snwprintf) do not produce zero-terminated strings if they exactly fill their buffer. En este caso, una llamada subsiguiente a una función de cadena que espera una cadena terminada en cero irá más allá del final del búfer buscando el cero.In this case, a subsequent call to a string function that expects a zero-terminated string will go beyond the end of the buffer looking for the zero. El programa debe asegurarse de que la cadena finaliza con un cero.The program should make sure that the string ends with a zero. En general, debe pasar una longitud a la función 'cadena contada' uno menor que el tamaño del búfer y, a continuación, asignar explícitamente cero y el último carácter en el búfer.In general, you should pass a length to the 'counted string' function one smaller than the size of the buffer and then explicitly assign zero to the last character in the buffer.

EjemploExample

El siguiente ejemplo de código genera esta advertencia:The following sample code generates this warning:


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

EjemploExample

Para corregir esta advertencia, finalice en cero la cadena como se muestra en el código de ejemplo siguiente:To correct this warning, zero-terminate the string as shown in the following sample code:


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

EjemploExample

El código de ejemplo siguiente corrige esta advertencia mediante la manipulación de cadenas seguro strncpy_s función:The following sample code corrects this warning using safe string manipulation strncpy_s function:


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

Tenga en cuenta que esta advertencia se muestra a veces en ciertas expresiones garantizadas que son seguras en la práctica.You should note that this warning is sometimes reported on certain idioms guaranteed to be safe in practice. Debido a la frecuencia y las posibles consecuencias de este defecto, la herramienta de análisis se inclina a encontrar problemas potenciales en lugar de la tendencia normal de reducción del ruido.Because of the frequency and potential consequences of this defect, the analysis tool is biased in favor of finding potential issues instead of its typical bias of reducing noise.

Vea tambiénSee Also

Utilizar anotaciones SAL para reducir defectos de código strncpy_s, _strncpy_s_l, wcsncpy_s, _wcsncpy_s_l, _mbsncpy_s, _mbsncpy_s_lUsing SAL Annotations to reduce code defects strncpy_s, _strncpy_s_l, wcsncpy_s, _wcsncpy_s_l, _mbsncpy_s, _mbsncpy_s_l