Выдаёт лишние символы char

Подскажите пожалуйста почему при такой конструкции:

char *clear_scr = new char[w * h]();
for (int i = 0; i < w * h; i++) {
    clear_scr[i] = symbol;
}
std::cout << clear_scr;
delete[] clear_scr;

выводятся нужные символы, а затем ¤¤¤¤?


Ответы (1 шт):

Автор решения: n1tr0xs

Потому что в цикле вы заменяете последний символ конца строки на свой. Например:

char *hello = "He";
hello[0] == 'H';
hello[1] == 'e';
hello[2] == '\0';

А вы этот "hello[2]" затираете своим символом. И cout "бежит" дальше пока не найдет '\0'.


Рабочий вариант:

char *clear_scr = new char[w * h]();
for (int i = 0; i < w * h - 1; i++) {
    clear_scr[i] = symbol;
}
std::cout << clear_scr;
delete[] clear_scr;
→ Ссылка