int main(){
char str[10][50],temp[50];
int lim,i,j;
printf("Enter lim: ");
scanf("%d",&lim);
for(i=0;i<lim;++i){
printf("Enter string[%d]: ",i+1);
gets(str[i]);
}
Здесь str[0](Enter string[1]:) не может быть прочитан. Чтение начинается с «Введите строку [2]:» (строка [1]).
Но если вместо lim в цикл передать целое число, как показано ниже, программа выполняется корректно. Что может быть причиной этого сценария?
int main(){
char str[10][50],temp[50];
int lim,i,j;
for(i=0;i<5;++i){
printf("Enter string: ");
gets(str[i]);
}
scanf
оставил новую строку во входном потоке. Итак, первыйgets
просто читает эту новую строку. На SO есть несколько дубликатов этого - person 4386427   schedule 15.06.2018gets
. Он настолько небезопасен и подвержен переполнению буфера, что был полностью удален из библиотеки C в C11. Если ваш профессор предлагает использоватьgets
, бегите, не ходите и найдите нового профессора — этот человек не знает, о чем говорит. - person David C. Rankin   schedule 15.06.2018