Именно для таких вещей C ++, кажется, сделан. Разбор пользовательского ввода и динамическое распределение выполняются более безопасно и быстро.
Я не могу вспомнить систему, в которой у вас есть такой пользовательский интерфейс, где вы не можете переключиться на C ++.
Конечно, если это только отрывок тестирования из другого кода, который страдает от проблемы, тогда, конечно ...
Ваш код страдает от нескольких распространенных ошибок для новичков в C и того, что в наши дни делать не следует.
Если я правильно понимаю, вы хотите сохранить несколько пользовательских строк ввода (ваш пример вывода немного вводит в заблуждение, потому что вы показываете только цифры).
Вы подготавливаете массив для хранения всех (количество дел) указателей на строки, но вы резервируете память только для одной строки. Вы должны сделать это для каждой строки, так что бывает. Чтобы упростить задачу с точки зрения урока «динамическое выделение памяти», я рекомендую сделать это следующим образом: char* array[cases][10000];
Это дает вам строки падежей по 10 тысяч символов.
Вы, вероятно, также не хотите иметь отдельные указатели на элементы массива. Это начинает иметь смысл, если вы хотите отсортировать элементы массива, когда эти элементы больше, чем сами указатели. В этом случае ваш выигрыш в производительности состоит не в том, чтобы перемещать (копировать) большие куски, а только в указателях (обычно 4 байта). В вашем случае int также имеет длину 4 байта. И вы все равно не сортируете:)
scanf()
опасно, если не сказать больше. Во втором приложении вы указываете записать строку по адресу массива. Это кажется простой ошибкой, но может привести ко многим проблемам. Вы, вероятно, хотите сделать это следующим образом: scanf("%d", &array[i]);
(К сожалению, у меня нет компилятора под рукой, поэтому я не уверен на 100%). оставьте следующую строку:)
Вопрос к специалистам по уценке: почему так чертовски невозможно объединить СПИСКИ с блоками КОД?