char * msg = new char[65546];
хочу инициализировать к 0 для всех них. что лучший способ состоит в том, чтобы сделать это в C++?
char * msg = new char[65546]();
Он известен как инициализация значения и был введен в C ++ 03. Если вы оказались в ловушке в предыдущее десятилетие, вам нужно будет использовать std :: fill ()
(или memset ()
, если вы хотите представить, что это C). .
Обратите внимание, что это не сработает ни для каких значений, кроме нуля. Я думаю, что C ++ 0x предложит способ сделать это, но я немного отстал от времени, поэтому не могу это комментировать.
ОБНОВЛЕНИЕ: кажется, мои размышления о прошлом и будущем языка не совсем точны; см. комментарии для исправлений.
как лучше всего сделать это в 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 ().
Преимущество этого подхода состоит в том, что вы можете делать все, что хотите, с динамически выделяемым буфером символов, но более безопасно, гибко, а иногда даже более эффективно (например, избегая необходимости линейного пересчета длины строки). Лучше всего то, что вам не нужно освобождать выделенную память вручную, так как деструктор сделает это за вас.
Этот метод использует функцию 'C' memset и является очень быстрым (позволяет избежать цикла "char-by-char").
const uint size = 65546;
char* msg = new char[size];
memset(reinterpret_cast<void*>(msg), 0, size);
"Самый" C ++ "способ сделать это - использовать std :: fill
.
std::fill(msg, msg + 65546, 0);
Вы можете использовать цикл for. но не забывайте, что последний символ должен быть нулевым!
char * msg = new char[65546];
for(int i=0;i<65545;i++)
{
msg[i]='0';
}
msg[65545]='\0';
Если нет действительно веской причины поступить иначе, я бы, вероятно, использовал:
std::vector<char> msg(65546, '\0');