Чем обоснован вывод для следующей программы cpp - PullRequest
0 голосов
/ 09 апреля 2020
char a[4];
cin >> a;
char b[3];
cin >> b;
cout << a << "\n";
cout << b;

input: india lockdown Дает вывод: kdown lockdown

, в то время как жесткое кодирование массива char, например

char a[]= "india"
char b[]= "winner"
cout << a <<" " << b;

, дает ожидаемый результат. Можете ли вы объяснить причину неожиданные результаты .... Спасибо

1 Ответ

6 голосов
/ 09 апреля 2020

То, что вы наблюдаете, является книжным примером переполнения буфера. Пользовательский ввод не помещается в буфер, и вы получаете мусор, записанный в некоторые другие переменные в стеке. Стандарт C ++ гласит, что это UB (неопределенное поведение), поэтому может случиться так много всего.

Во втором примере размер массивов выбирается автоматически для соответствия строкам (включая терминаторы с нулевыми символами).

...