#include<stdio.h>
#include<conio.h>
int main()
{
char test [7];
for(int i=0;i<10;i++)
scanf("%c",&test[i]);
puts(test);
getch();
return 0;
}
Я использую DevC++ (университетские правила), и я знаю, что gets() не имеет проверки границ, поэтому я намеренно использовал цикл() для ввода строки. Когда я вхожу в строку, большую размера массива, puts печатает дополнительный символ. Почему так ??Почему puts() печатает дополнительный символ в конце?
Пример ввода: HelloWorld Выход: hellowos
Пример ввода: Hellopeople Выход: Hellopep
Не существует 'gets', пожалуйста, забудьте, что эта функция когда-либо существовала. OTOH 'fgets' жив и здоров, и вы должны использовать его вместо своего рукописного цикла, который в принципе мог бы работать, если бы вы не закончили свою строку символом NUL. Также, что с намеренным переполнением 7-символьного длинного буфера с количеством символов до 10 символов? –
UB multi-dupe. Не перебегайте границы массива и обратите внимание, что SO доступен для поиска. –
@ н.м. Преднамеренное переполнение было просто для проверки поведения puts в случае переполнения. Можете ли вы объяснить мне, почему puts() печатает более 8 символов, когда он должен был печатать только 7. И почему печатный символ немедленно. –