Я пытаюсь инициализировать массив ненулевым значением:
BYTE byteArray[50];
memset(byteArray, 20, sizeof(byteArray)); // Works fine
int intArray[50];
memset(intArray, 20, sizeof(intArray)); // Does not work
На данный момент я просто вручную инициализирую массив:
// Initialise array manually
for (int pos = 0; pos < 50; pos++)
intArray[pos] = 20;
Я понимаю, что memset
устанавливает каждый байт в диапазоне памяти, поэтому это не может работать так, как мне нужно для многобайтовых типов (за исключением особого случая, когда запрошенное значение равно 0
). Есть ли способ принудить memset
к ненулевым значениям, используя многобайтовые типы, или, возможно, есть альтернативная библиотечная функция?
#include <algorithm>
. - person AlainD   schedule 03.03.20170
вы также можете установить многобайтовое значение со знаком-1
(если закодировано как0xFFFFFFFF
) или значение без знакаUINT_MAX
, оба из которых могут быть полезны для инициализации массива. - person Weather Vane   schedule 03.03.2017std::fill_n
является приемлемым решением. - person JeremyP   schedule 03.03.2017std::fill_n
работает хорошо. Возможно, тот, кто удалил тег [C++], сделал это, потому чтоmemset
— это библиотечная функция C, но это было немного переусердствовало, поскольку вопрос относится к семейству C/C++. Спасибо. - person AlainD   schedule 03.03.2017memset()
работает с байтами, она ничего не знает ни о каком другом объекте, напримерint
- person user3629249   schedule 05.03.2017