Ваш код имеет неопределенное поведение и крайне небезопасен.
Элементы ваших массивов data
являются указателями, а их начальные значения - мусором. Они могут указывать на память, которая используется для каких-то других целей, или на память, которая не существует. Я был бы удивлен, если бы ваша программа не взломала sh.
Вам не нужно звонить malloc
. Вы можете определить
char data[10][100];
Кроме того, вы не должны использовать feof
, чтобы определить, когда вы закончили чтение ввода. feof
возвращает истинное значение, если функция ввода предыдущая не выполнена из-за исчерпания ввода. Если есть ошибка, отличная от запуска, отличного от исчерпания ввода, ferror
вернет true, а feof
- нет. Используйте значение, возвращаемое fgets
, чтобы определить, удалось ли оно.