Комментарий Дженса указал на причину. Вот более подробный ответ.
Следующий код проблематичен.
scanf("%d", &n);
char arr[n];
gets(arr)
Если длина входной строки, считываемой gets
, больше n, то вы получаете запись за пределами допустимого диапазона. Это может быть не проблема входной строки всегда меньше, чем n символов. Вот живой тест , чтобы продемонстрировать проблему.
предлагаемое исправление:
scanf("%d", &n);
char arr[n];
fgets(arr, n-1, stdin);
arr[n-1] = '\0' //make sure the string is terminated.