Отображение массива char в gcc не работает

Я написал кусок кода и протестирован с компилятором gcc

#include <iostream>

int main()
{
char arr[ 1000 ];
for( int index( 0 ); index < 1000; ++index )
{
std::cout << arr[ index ] << std::endl;
}
return 0;
}

Я надеялся напечатать значения мусора, но, к моему удивлению, он ничего не печатал. Когда я просто изменил тип данных arr с char на int, он отобразил значения мусора, как и ожидалось. Может ли кто-нибудь объяснить это мне?

1

Решение

Перегрузки для << для типов символов не рассматривайте их как
целочисленные типы, но как символы. Если значение мусора
соответствует печатному символу (например, 97, что соответствует
в 'a'), Вы увидите его. Если это не так (например, 0), вы не будете.
И если значения мусора соответствуют некоторой escape-последовательности
что заставляет ваш терминал использовать черный передний план на черном фоне, вы больше ничего не увидите, точка.

Если вы хотите увидеть фактические числовые значения char (или же
любой тип символа), просто преобразовать переменную в int до
вывести его:

std::cout << static_cast<int>( arr[index] ) << std::endl;
4

Другие решения

То, что вы пытаетесь сделать, имеет undefined behavior, Некоторые компиляторы очищают память для вас, другие оставляют ее как было до создания вашего буфера.

В целом, это бесполезный тест.

2

Некоторые платформы могут выбрать, например, в целях безопасности, заполнение неинициализированного массива char нулями, даже если он не статичен и не был явно инициализирован.
Таким образом, вот почему мусор не появляется — ваш массив символов был просто автоматически инициализирован.

2

На вашей платформе мусорные символы не печатаются. На другой платформе это может быть иначе.

В качестве эксперимента попробуйте это

std::cout << '|' << arr[ index ] << '|' << std::endl;

Посмотрите, появляется ли что-нибудь между || персонажи.

1

Вы получаете неопределенное поведение, потому что вы пытаетесь использовать значения из неинициализированного массива. Вы не можете ожидать ничего особенного, чтобы это произошло. Может быть, каждый символ непечатный. Может быть, он просто решил, что не хочет ничего печатать, потому что ему не нравятся твои маленькие игры. Все идет.

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector