инициализация char массив с пробелами
Я хочу 20-символьный NULL (''), завершающий строку, заполненную пробелами.
В настоящее время я делаю это следующим образом
char foo[20];
for (i = 0; i < num_space_req; i++) //num_space_req < 20
{
foo[i] = ' ';
}
foo[num_space_req] = '';
есть ли лучший способ для выше?
8 ответов
для инициализации массива в пробелы можно использовать следующее:
memset(foo, ' ', num_space_req);
foo[num_space_req] = '';
поскольку вопрос имеет тег C++, идиоматическим способом будет:
std::fill(foo, foo + num_space_req, ' ');
// or
std::fill_n(foo, num_space_req, ' ');
обратите внимание, что он не работает в с.
As @OliCharlesworth сказал, лучший способ-использовать memset
:
char bla[20];
memset(bla, ' ', sizeof bla - 1);
bla[sizeof bla - 1] = '';
обратите внимание, что в GNU C вы также можете использовать следующее расширение (диапазон, обозначенный инициализаторами):
char bla[20] = {[0 ... 18] = ' ', [19] = ''};
Если вы хотите инициализировать массив во время компиляции, вы можете изменить свой char foo[20];
декларации следующим образом:
char foo[20] = {0x20};
Если вам нужно инициализировать массив пробелами во время выполнения, то вы можете использовать следующее:
memset(foo, ' ', sizeof(foo) -1);
foo[20] = '';
memset может быть лучше оптимизирован, чем ваш цикл for, он может быть точно таким же. выберите один из:
memset( foo, ' ', sizeof(foo) -1 );
memset( foo, ' ', 19 );
memset( foo, ' ', 19 * sizeof(char) );
#include <cstring>
void makespace(char *foo, size_t size) {
memset((void*)&foo, ' ', size - 1);
foo[size] = 0;
}
// ...
makespace(foo, 20);