Вы получаете segfault, потому что с array[i] = "____________________";
вы разрешаете указывать каждому array[i]
строковый литерал.Обратите внимание, что вы не копируете содержимое литерала, но позволяете array[i]
напрямую указывать на него.Следовательно, с array[0][0] = '2'
вы изменяете строковый литерал тогда, что является неопределенным поведением (в этом случае весьма вероятно проявится как segfault).
Используйте взамен strcpy(array[i],"____________________);
.
Кстати: напишите array[i] = malloc(sizeof(char) * (20+1));
(обратите внимание на sizeof(char)
вместо sizeof(char*)
здесь и +1
для символа завершения строки).