Это, вероятно, связано с тем, что get () читает со стандартного ввода.
Слегка измененная версия вашей программы:
#include <stdio.h>
int n = 1;
void return_input(void)
{
char array[30];
gets (array);
printf("%s\n", array);
if (n--) return_input();
}
int main(void)
{
return_input();
return 0;
}
Если я просто запустил его, я могу набрать 2 короткие строки (за каждой следует клавиша Enter), например:
C:\gets.exe
qwe
qwe
123
123
И здесь qwe и 123 повторяются на экране (первый раз, когда я их печатаю, второй, когда они печатаются).
Когда я передаю программы ввода в Windows с помощью команды echo, я получаю следующее без возможности ввода второй строки, get () каким-то образом удается получить мусор в качестве ввода при вызове во второй раз:
C:\echo qwe|gets.exe
qwe
№ ☺
Итак, что-то не так в том, как gets () читает ввод по каналу, и это не имеет никакого отношения к переполнению стека.