У меня проблема: Мне нужно прочитать текст (из stdin), и я знаю, сколько строк текст имеет (N), это будет примерно так: sentence1 (введите) предложение2 (введите) предложение3 (введите) \ 0 Я не знаю, сколько символов в каждом предложении (число будет отличаться). Пожалуйста, помогитемассив строк, динамически распределенных в C
-1
A
ответ
1
Вы читаете строки неизвестной длины, но знаете, что есть N строк.
char *lines[N]; // the array of pointers to your lines
int i = 0;
читать каждую строку вы можете объявить большой массив символов, если у вас есть некоторое представление о том, как долго может быть самое длинное предложение:
char *buffer;
buffer = calloc(1000, sizeof(char)); // An arbitrary size. I made it up.
Затем используйте fgets() для чтения из файла в буфер. fgets() будет читать следующую новую строку или EOF, в зависимости от того, что наступит раньше.
Затем поместите адрес вашего malloc'd пространства в массиве указателей:
lines[i] = buffer;
Недостатком этого является много неиспользуемого пространства в предложениях. Один из способов вокруг него было бы выделить еще один массив символов после чтения строки из файла:
char *sentence = calloc(strlen(buffer)+1, sizeof(char));
strcpy(sentence, buffer, strlen(buffer));
Затем поместите адрес предложения в массиве указателей:
lines[i] = sentence;
это все падает если какое-либо предложение длиннее 1000 символов.
Смежные вопросы
- 1. Динамически выделенный массив динамически распределенных строк
- 2. Используйте массив структур, динамически распределенных в C
- 3. динамическое распределение массива динамически распределенных строк в c
- 4. Передача динамически распределенных целых массивов в C
- 5. Пересечение двух динамически распределенных массивов C++
- 6. Сравнение динамически распределенных двух массивов в C++
- 7. Qsort динамически распределенного массива динамически распределенных строк по длине строки
- 8. Как динамически выделять массив строк в C?
- 9. Использование динамически распределенных матриц
- 10. Как получить длину динамически распределенных двумерных массивов в C
- 11. Листинг динамически распределенных массивов произвольных указателей в ANSI C
- 12. Разделение динамически распределенных многомерных массивов.
- 13. Массив динамически выделенных строк
- 14. Повторная калибровка динамически распределенных массивов
- 15. Освобождение частей динамически распределенных блоков?
- 16. Чтение строк из файла в динамически выделенный массив в C
- 17. Как добавить динамически выделенную строку в массив строк в C?
- 18. Инициализировать динамически распределенные структуры в динамически распределенных структурах
- 19. Массив строк в C
- 20. Как передать содержимое динамически распределенных структур и подструктур двойников в массив? (C)
- 21. Как вырастить 2d динамически распределенный массив строк в C++ 11?
- 22. Как динамически выделять/вырастить массив строк в C++?
- 23. Динамически расширяющийся массив C
- 24. Инициализация массива строк динамически в C
- 25. Создать массив динамически в C++
- 26. C fread() Волшебное чтение динамически распределенных членов структуры, как?
- 27. Добавление новых строк в массив динамически
- 28. Запись строк в динамически выделенный массив
- 29. Как динамически добавлять элементы в массив строк?
- 30. Чтение строк в динамически выделенный массив