Compartilhar via


C6260

aviso C6260: sizeof * sizeof é quase sempre errado, sua intenção era utilizar uma contagem de caracteres ou uma contagem de bytes?

Esse aviso indica que os resultados de duas operações de sizeof forem multiplicados juntos.O operador C/C++ sizeof retorna o número de bytes de armazenamento o objeto.Geralmente está incorreto multiplicá-lo por outra operação de sizeof ; geralmente um está interessado no número de bytes em um objeto ou o número de elementos em uma matriz (por exemplo o número de caracteres em uma matriz ampla).

Há algum comportamento unintuitive associado com o operador de sizeof .Por exemplo, em C, sizeof ('\0') == 4, como um caractere é de um tipo integral.Em C++, o tipo de um literal é char, assim sizeof ('\0') == 1.No entanto, no C e C++ 2.0, o seguinte for verdadeiro:

sizeof ("\0") == 2. 

Exemplo

O código a seguir gera este aviso:

#include <windows.h>

void f( )
{
  int i;
  i = sizeof (L"String") * sizeof (WCHAR);
  // code ...
}

Para corrigir esse aviso, use o seguinte código:

#include <windows.h>

void f( )
{
  int i;
  i= sizeof (L"String") / sizeof (WCHAR);
  
  /* or to get bytes */
  i = sizeof (L"String");
  // code ...
}

Consulte também

Referência

Operador sizeof

Operador sizeof (C)