3 / 3 / 0
Регистрация: 23.11.2011
Сообщений: 97
|
|
1 | |
Чтение строки неизвестной длины23.11.2011, 14:40. Показов 37000. Ответов 42
Метки нет (Все метки)
реализация на СИ
как прочитать строку неизвестной длины? Чтение должно быть не посимвольным. Строка вводиться вручную.
0
|
23.11.2011, 14:40 | |
Ответы с готовыми решениями:
42
Чтение из файла с пропуском комментария неизвестной длины Чтение из файла строки неизвестной длинны Массив символов неизвестной длины Ввод массива неизвестной длины |
3 / 3 / 0
Регистрация: 23.11.2011
Сообщений: 97
|
|
23.11.2011, 16:45 [ТС] | 24 |
-=ЮрА=-, с консоли, и Сыроежка прав, можно просто указать входной поток заместо файла, но меня ломает ради простого ввода строки так извращаться. не дорос я еще до высот программирования, поэтому вариант Юры мне очень приемлем)
Добавлено через 1 минуту Пишу вообще под линукс, и помимо этого ввода еще нужно сделать обработчик сигналов и т.п. - там много всего) поэтому усложнять не хочется)
0
|
Заблокирован
|
|
23.11.2011, 16:53 | 25 |
Не по теме: Сыроежка, я сейчас не способен вам достойно ответить ввиду 3-х кратного бана Добавлено через 1 минуту - ввиду этого свою помощь в топике считаю оконченной, как и говорил Siend, успешной вам здачи!
0
|
Заблокирован
|
||||||
23.11.2011, 17:06 | 26 | |||||
Я вам приведу альтернативный вариант
Преимущество этого кода по сравнению с тем, что вам предложили состоит в том, что если будет введена строка, состоящая, к примеру, из 127 символов, то вместо выделения памяти 127 раз, как это делается в первоначально предоженном вам варианте, здесь память будет выделяться только один раз. Как говорится, почувствуйте разницу.
0
|
Модератор
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
|
|
23.11.2011, 17:41 | 27 |
Не придираясь к тому, что нужно проверять результат вызова realloc(), что-то мне подсказывает, что на втором и следующих проходах fgets будет s с начала перезаписывать, при этом каждый раз честно увеличивая размер выделенной памяти...
0
|
Заблокирован
|
||||||
23.11.2011, 18:16 | 30 | |||||
Siend, чтобы Вам было меньше возни, вот вам код аналогичный функционалу
даже лучше(т.к аллокаем через каждые 1024 символов)
0
|
|
23.11.2011, 18:25
#32
|
Не по теме: voral, я лишь показал что можно спокойно обойтись без fgets - далее как говориться дело техники...
0
|
Заблокирован
|
||||||
23.11.2011, 18:31 | 33 | |||||
Я думаю, что в этом коде имеется логическая ошибка
0
|
23.11.2011, 18:39 | 34 | ||||||||||
Может так
Упс точно
bufSize конечно же лучше поставить больше 10
0
|
|
23.11.2011, 18:39
#35
|
Не по теме: Сыроежка, ну что мне тут вам доказывать, я накидал чтобы был понятен принцип, мне есть чем заняться и расстрачивать своё время не имею ни малейшего желания. Технические огрехи устранимы - важен принцип - аллокнули 1024, пока не заполнили их не аллокаем, заполнили добавили 1024 и всё...
0
|
Заблокирован
|
|||||||||||
23.11.2011, 18:43 | 37 | ||||||||||
У вас как раз первый вариант был лучше, так как не нужно было присваивать -1 sLen.
Вам просто нужно было (как, впрочем, и в вашем втором варианте) исправить код
1
|
Заблокирован
|
||||||
23.11.2011, 18:48 | 38 | |||||
Думаю всё же лучше так
0
|
23.11.2011, 18:52 | 39 | |||||
стоп. а какая разница? не не не. Имх код первый нормальный только не учтен последний \0.
надо все ж проверить. думаю достаточно при аллоке и реалоке еще +1 сделать.
Т.е. заносим сивол в массив, потом увиличиваем длинну (он же индекс). Если индекс вышел на границу (т.е. уже не допустим) добавляем памяти. +1 в функциях с памятью дает резерв для \0
0
|
Заблокирован
|
||||||
23.11.2011, 18:57 | 40 | |||||
voral, зачем
?
dsgfdg Your input : dsgfdg Для продолжения нажмите любую клавишу . . . Добавлено через 1 минуту Если i < 1024 добавим это значение к sLen здесь а так аллокаем предлагаю оттестировать, т.к мне уже нужно выходить...
0
|
23.11.2011, 18:57 | |
23.11.2011, 18:57 | |
Помогаю со студенческими работами здесь
40
Считывание массива неизвестной длины Чтение строки неограниченной длины и её параллельная обработка Создание массива чисел неизвестной длины Ввод массива заранее неизвестной длины Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |