Я всегда получаю такую мусорную стоимость, как этот "Íýýýý" "" "" "" "" "" "в конце, когда я вывожу свой массив. Что я делаю не так?
void func()
{
const int size = 100;
char * buffer = new char[size];
for(int i=0; i<size; i++)
buffer[i] = ' ';
cout<<buffer;
}
Однако, если я использую цикл for для вывода буфера, нет значения мусора.
Поскольку вы не завершаете нулевой буфер, std::cout.operator<<(char*)
попытается найти \0
качестве его завершающего символа.
Как указано в комментариях, не стесняйтесь добавлять этот \0
к концу вашего буфера :).
buffer[size-1] = '\0';
i
не доступен в этой области
ScarletAmaranth прав. Строки стиля C (массив символов) должны заканчиваться символом '\ 0'. То, что функции, которые играют с массивами char (cout в этом случае), знают, когда строка заканчивается в памяти. Если вы забыли символ "\ 0" в конце массива, cout печатает все символы в массиве и затем печатает любые данные в памяти после массива. Эти другие данные - мусор, и поэтому вы видите эти странные персонажи.
Если вы используете тип строки (более [стиль CN10]) вместо массивов символов, у вас не будет этой проблемы, потому что тип строки не использует '\ 0' в качестве разделителя строк.
С другой стороны, вы не видите мусора, когда используете цикл для итерации по 100 элементам массива только потому, что вы печатаете только эти 100 символов. Я имею в виду, что вы точно контролируете то, что вы печатаете, и знаете, когда остановиться, вместо того, чтобы оставлять функцию cout, когда останавливать печать.
std::cout << std::string(100, ' ');
? 100 мест на экране, без индексации, без циклов, без утечек памяти, ...