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