Подтвердить что ты не робот

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

char * msg = new char[65546];

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

std::fill(msg, msg + 65546, 0);

Ответ 3

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

std::vector<char> msg(65546, '\0');

Ответ 4

что это лучший способ сделать это в С++?

Потому что вы спросили его так:

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, но более безопасно, гибко, а иногда и более эффективно (избегая необходимости перекомпоновки длины строки линейно, например). Лучше всего, вам не нужно освобождать выделенную память вручную, поскольку деструктор сделает это за вас.

Ответ 5

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

const uint size = 65546;
char* msg = new char[size];
memset(reinterpret_cast<void*>(msg), 0, size);

Ответ 6

memset(msg, 0, 65546)

Ответ 7

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

char * msg = new char[65546];
for(int i=0;i<65545;i++)
{
    msg[i]='0';
}
msg[65545]='\0';

Ответ 8

C-подобный метод может быть не столь привлекательным, как другие решения этого вопроса, но добавлен здесь для полноты:

Вы можете инициализировать с помощью NULL, например:

char msg[65536] = {0};

Или использовать нули, рассмотрим следующее:

char msg[65536] = {'0' another 65535 of these separated by comma};

Но не пытайтесь использовать невозможно, поэтому используйте memset!

Во втором случае добавьте следующее после memset, если вы хотите использовать msg как строку.

msg[65536 - 1] =  '\0'

Ответ на этот вопрос также дает дополнительную информацию.