как инициализировать массив символов?

char * msg = new char[65546];

хочу инициализировать к 0 для всех них. что лучший способ состоит в том, чтобы сделать это в C++?

37
задан 5YrsLaterDBA 28 June 2010 в 17:03
поделиться

7 ответов

char * msg = new char[65546]();

Он известен как инициализация значения и был введен в C ++ 03. Если вы оказались в ловушке в предыдущее десятилетие, вам нужно будет использовать std :: fill () (или memset () , если вы хотите представить, что это C). .

Обратите внимание, что это не сработает ни для каких значений, кроме нуля. Я думаю, что C ++ 0x предложит способ сделать это, но я немного отстал от времени, поэтому не могу это комментировать.

ОБНОВЛЕНИЕ: кажется, мои размышления о прошлом и будущем языка не совсем точны; см. комментарии для исправлений.

61
ответ дан 27 November 2019 в 04:09
поделиться

как лучше всего сделать это в C ++?

Потому что вы задали такой вопрос:

std::string msg(65546, 0); // all characters will be set to 0

Или:

std::vector<char> msg(65546); // all characters will be initialized to 0

Если вы работаете с функциями C, которые принимают char * или const char *, вы можете сделать:

some_c_function(&msg[0]);

Вы также можете использовать c_str () для std :: string, если он принимает const char * или data ().

Преимущество этого подхода состоит в том, что вы можете делать все, что хотите, с динамически выделяемым буфером символов, но более безопасно, гибко, а иногда даже более эффективно (например, избегая необходимости линейного пересчета длины строки). Лучше всего то, что вам не нужно освобождать выделенную память вручную, так как деструктор сделает это за вас.

9
ответ дан 27 November 2019 в 04:09
поделиться

Этот метод использует функцию 'C' memset и является очень быстрым (позволяет избежать цикла "char-by-char").

const uint size = 65546;
char* msg = new char[size];
memset(reinterpret_cast<void*>(msg), 0, size);
6
ответ дан 27 November 2019 в 04:09
поделиться
memset(msg, 0, 65546)
5
ответ дан 27 November 2019 в 04:09
поделиться

"Самый" C ++ "способ сделать это - использовать std :: fill .

std::fill(msg, msg + 65546, 0);
16
ответ дан 27 November 2019 в 04:09
поделиться

Вы можете использовать цикл for. но не забывайте, что последний символ должен быть нулевым!

char * msg = new char[65546];
for(int i=0;i<65545;i++)
{
    msg[i]='0';
}
msg[65545]='\0';
1
ответ дан 27 November 2019 в 04:09
поделиться

Если нет действительно веской причины поступить иначе, я бы, вероятно, использовал:

std::vector<char> msg(65546, '\0');
15
ответ дан 27 November 2019 в 04:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: