C6209
Aviso C6209: usando 'sizeof <variable1> ' como o parâmetro <number> na chamada para <function> onde <variable2> pode ser uma matriz de caracteres extensos, você pretendia usar contagem de caracteres em vez de contagem de bytes?
Este aviso indica que um parâmetro para uma chamada de função incorretamente pode ser uma contagem de bytes em vez de uma contagem de caracteres. Se for esse o caso, esse defeito provavelmente causará uma falha de programa ou corrupção de memória, embora alguns casos podem causar uma brecha na segurança pode ser explorada.
Uma causa comum deste defeito está usando sizeof em uma matriz de caracteres. O sizeof operador sempre calcula o número de bytes. Para caracteres ANSI é o mesmo que o número de caracteres; No entanto, para caracteres Unicode é duas vezes o número de caracteres.
Geralmente é seguro calcular o número de elementos em uma matriz, dividindo o tamanho da matriz pelo tamanho de cada elemento.
Esse aviso é gerado quando:
Uma variável é passada como um parâmetro e sizeof essa variável é passada como parâmetro para a outra.
O tipo de variável e o tipo de parâmetro formal são algumas variedade de toda a ponteiro char.
Exemplo
O exemplo de código a seguir gera este aviso porque sizeof pC é passado para a função de 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 corrigir esse aviso, passe o tamanho correto, conforme mostrado no código a seguir:
#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 ...
}
Deve-se observar a heurística usada pode ser incorreta de codificação de certos estilos; Portanto, esse aviso pode não corresponder a um defeito real no código.