C6209
Aviso C6209: usando 'sizeof <variable1>' sistema autônomo parâmetro <number>na telefonar para <função>onde <variable2>pode ser uma matriz de caractere largos, você pretendia usar contagem de caractere em vez de contagem de byte?
Este aviso indica que um parâmetro para uma telefonar de função incorretamente pode ser uma contagem de byte em vez de um número de caractere.Se for esse o caso, esse defeito provavelmente causar uma falhar de programa ou corrupção da memória, embora alguns casos podem causar uma falhar de segurança pode ser explorada.
Uma causa comum desse defeito está utilizando sizeof em uma matriz de caractere. The sizeof operador sempre calcula o número de bytes. Para caracteres ANSI, este é o mesmo sistema autônomo 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 dimensionar da matriz pelo dimensionar de cada elemento.
Esse aviso é gerado quando:
Uma variável é passada sistema autônomo um parâmetro e sizeof Essa variável é passada sistema autônomo outro parâmetro.
Tanto o tipo de variável e o tipo de parâmetro formal são alguns variedade de toda a ponteiro char.
Exemplo
The following sample code generates this warning because sizeofpC is passed to my_wcsncpy function:
#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 dimensionar 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 ...
}
É preciso observar que o heurístico usado pode ser incorreto para alguns estilos de codificação; portanto, este aviso não pode corresponder a um defeito real no código.