Предупреждение C6260

sizeof * sizeof почти всегда неправильно, вы намерены использовать число символов или число байтов?

Это предупреждение означает, что результаты двух sizeof операций умножаются вместе.

Замечания

Оператор C/C++ sizeof возвращает количество байтов хранилища, которые использует объект. Обычно неправильно умножать его на другую sizeof операцию. Как правило, вы заинтересованы в количестве байтов в объекте или количестве элементов в массиве (например, число расширенных символов в массиве).

Существует некоторое непреднамеренное поведение, связанное с sizeof оператором. Например, в C, sizeof ('\0') == 4так как символ имеет целочисленный тип. В C++тип символьного литерала имеет значение char, поэтому sizeof ('\0') == 1. Однако в C и C++следующее отношение имеет значение true:

sizeof ("\0") == 2

Имя анализа кода: USEOFBYTEAREA

Пример

Следующий код создает это предупреждение:

#include <windows.h>

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

Чтобы исправить это предупреждение, используйте следующий код:

#include <windows.h>

void f( )
{
  // use divide to calculate how many WCHAR characters are in the string
  int i = sizeof (L"String") / sizeof (WCHAR);

  // get the number of bytes in the character array
  int j = sizeof (L"String");

  // code ...
}

См. также