Написать макроопределения INIT(имя, количество), INPUT(имя) и FREE(имя). INIT(имя, количество) заводит локальный массив строк имя на количество элементов (изначально содержащий NULL-ы); INPUT(имя) вводит не более количества строк, а FREE(имя) — освобождает память, занятую этими строками. Тестирующая программа при этом может выглядеть так:
November 2026 Su Mo Tu We Th Fr Sa 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
November 2026 Su Mo Tu We Th Fr Sa 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 EMPTY EMPTY EMPTY EMPTY EMPTY
Подсказка. В INPUT(имя) как бы не хватает параметра «количество»? Откуда его взять? Поскольку мы заводим ''локальный массив'' строк (а не char **), от него можно брать sizeof (не забываем, что это количество байтов, а не количество элементов типа char *`)
Подсказка 2. В free() можно передавать NULL
Подсказка 3. Строка, введённая getline() и getdelim(), заканчивается разделителем, если если она его встретила, а если встретился конец ввода — чем попало. Что будет, если разделитель оказался в конце ввода? Сначала введйтся обычная строка. Следующий вызов ведёт пустую строку — буквально всё между последним разделителем и концом ввода. И только следующий вернёт EOF. Именно поэтому в проверяющей программе EMPTY соответствует и этой пустой строке, и строке, которую вводить уже не стали
