Как установить все биты в массиве символов в нули? - PullRequest
0 голосов
/ 19 февраля 2020

Я создаю символьный указатель на массив и хотел инициализировать его так, чтобы все элементы в массиве имели 0 (в битах). Так, например:

char* buffer = new char[bufferSize];

Для буфера [0] в буфер [bufferSize] будет храниться '00000000' в каждом индексе. Я пытаюсь сохранить 8 битов нулей в каждой ячейке.

Как я могу его инициализировать? Я также должен использовать fill ().

Пока что

fill(&buffer, &buffer[bufferSize], 0)

не работает.

Ответы [ 2 ]

6 голосов
/ 19 февраля 2020

Вы можете использовать fill, но вы должны помнить, что он принимает пару итераторов. Указатель на элементы массива уже является итератором массива. Для его передачи не нужно брать адрес итератора, поэтому ваш первый аргумент неверен. Более правильная форма будет

std::fill(buffer, buffer + bufferSize, 0);

или

std::fill_n(buffer, bufferSize, 0);

В качестве альтернативы, вы можете просто обнулить инициализацию массива в самом новом выражении

char* buffer = new char[bufferSize] {} ;
                                  // ^ - initializer, for char this will zero out the array.
0 голосов
/ 19 февраля 2020

Лучший способ сделать это с помощью строки:

std::string buffer(bufferSize, '\0');

, если вы настаиваете на использовании char*, используйте calloc:

char* buffer = static_cast<char*>(std::calloc(bufferSize, 1));

Если у вас уже есть буфер, вы можете обнулить его с помощью memset:

std::memset(buffer, 0, bufferSize);
...