Compartir a través de


C6209

Advertencia C6209: Utilizar 'sizeof<variable> como parámetro <número> en la llamada a <función> donde <variable2> puede ser una matriz de caracteres anchos, ¿deseaba utilizar un recuento de caracteres en lugar de un recuento de bytes?

Esta advertencia indica que un parámetro a una llamada a la función podría ser, por error, un recuento de bytes, en lugar de un recuento de caracteres. En este caso, es probable que este defecto provoque un deterioro de memoria o un bloqueo del programa, aunque algunos casos pueden provocar una vulnerabilidad de seguridad explotable.

Una causa común de este defecto es el uso de sizeof en una matriz de caracteres. El operador sizeof siempre calcula el número de bytes. Para los caracteres ANSI, es el mismo que el número de caracteres; sin embargo, para los caracteres Unicode es dos veces el número de caracteres.

Habitualmente es seguro calcular el número de elementos de una matriz dividiendo el tamaño de la matriz por el tamaño de cada elemento.

Se genera esta advertencia cuando:

  • Se pasa una variable se pasa como un parámetro y sizeof se pasa como otro parámetro.

  • El tipo variable y el tipo de parámetro formal son algún tipo de puntero a carácter ancho.

Ejemplo

El código de ejemplo siguiente genera esta advertencia porque se pasa sizeof pC a la función my_wcsncpy:

#include<windows.h>
extern void my_wcsncpy(wchar_t *, wchar_t *, size_t);

void f( )
{
  WCHAR pC[15];
  wchar_t* input = L"Hello, World!";
  
  my_wcsncpy(pC, input, sizeof pC);
  // code ...
}

Para corregir esta advertencia, pase el tamaño correcto, como se muestra en el siguiente código:

#include<windows.h>
extern void my_wcsncpy(wchar_t *, wchar_t *, size_t);

void f( )
{
  WCHAR pC[15];
  wchar_t* input = L"Hello, World!";
  
  my_wcsncpy(pC, input, (sizeof pC) / (sizeof pC[0]));
  // code ...
}

Tenga en cuenta que la heurística utilizada puede ser incorrecta para algunos estilos de codificación; por consiguiente, esta advertencia podría no corresponder a un defecto real del código.

Vea también

Referencia

sizeof Operator

sizeof Operator (C)