Простое чтение строки произвольного (любого) размера из консоли в языке си (C , С)
Primary tabs
Forums:
Читать будем блоками из стандартного потока ввода, оригинал здесь = http://www.cplusplus.com/forum/beginner/... ,
а русские комментарии к коду, собственно, на этой вот странице.
- Log in to post comments
- 24443 reads
vedro-compota
Fri, 09/30/2011 - 15:04
Permalink
собственно, код следующий
собственно, код следующий ,но со смыслом пока туго. =
_____________
матфак вгу и остальная классика =)
vedro-compota
Fri, 09/30/2011 - 16:25
Permalink
описания функций , использованных в данном примере
Описание этой функции и последующих взяты с сайта = http://www.codenet.ru/progr/cpp/sprd/fge... (если в этой теме буду использовать другой источник - обязательно дам ссылку)
fgets() -чтение строки из потока (например - стандартного потока ввода stdin или какого-либо файла)
Описание
Считывает литеры из потока fp в строку по указателю
str. Чтение заканчивается, когда встречается литера
`\n' (новая строка), конец файла, возникает ошибка чте-
ния или число прочитанных литер достигает n-1. Строка
завершается 0. Литера '\n' (новая строка) включается в
строку (перед 0).
Использование
Возвращаемое значение
Возвращает строку str в случае успеха. Если не было
прочитано ни одной литеры и произошла ошибка чтения
или встречен EOF, возвращает NULL, а строка str оста-
ется без изменения. Если возникла ошибка при чтении,
возвращает NULL, а в строке возможен мусор.
Пример
Рекомендация
Смотрите также fputs, gets, puts.
----------------------
когда fgets читатет строку, то - получившаяся строка завершается нулевым символом '\0'.
_____________
матфак вгу и остальная классика =)
vedro-compota
Fri, 09/30/2011 - 15:18
Permalink
realloc() - переразмещаем блок памяти, возможно изменяя размер
realloc - переразместить блок памяти
Описание
realloc изменяет размер ранее выделенного блока памя-
ти, на который указывает ptr. Размер этого блока после
обращения к realloc определяется параметром size. Если
size равен 0, блок освобождается и возвращается NULL.
Если ptr равен NULL, то отводится (по malloc) size
байтов памяти и возвращается указатель на этот массив
памяти. Если для расширения текущего блока места не
хватает, будет размещен новый блок, а текущий блок ос-
вободится. Текущие данные перепишутся в новый блок.
Использование
Возвращаемое значение
Возвращается указатель на переразмещенный блок памя-
ти. Если нет подходящей памяти для выполнения realloc,
возвращается NULL (но память по ptr не освобождается).
Пример
Рекомендация
Смотрите также calloc, free, malloc.
_____________
матфак вгу и остальная классика =)
vedro-compota
Fri, 09/30/2011 - 15:20
Permalink
malloc ()- выделение памяти по заданному адресу
malloc ()- выделение памяти по заданному адресу
Описание
Размещает блок памяти объемом numbytes байтов. Если
numbytes равен 0, то возвращает NULL.
Использование
Возвращаемое значение
Возвращает указатель на размещенный блок памяти. Либо
возвращает NULL при недостатке памяти или в случае
numbytes==0.
Пример
Рекомендация
Смотрите также calloc, free, realloc, farmalloc.
_____________
матфак вгу и остальная классика =)
vedro-compota
Fri, 09/30/2011 - 15:23
Permalink
free - освобождение памяти
free - освободить память
Описание
Освобождает память по указателю p. Эта память должна
быть выделена ранее с использованием функций calloc,
malloc или realloc. Если p = NULL, free бездействует.
Если был использован флаг компилятора строгой ANSI со-
вместимости, то free возвращает void (т. е. не возвра-
щает значения).
Предостережение: не освобождайте данные более одного раза,
не работайте с освобожденными данными.
Использование
Возвращаемое значение
Возвращает 0 в случае успеха или -1, если испорчен
механизм управления памятью или p ошибочно. Значе-
ние -1 указывает на наличие серьезной ошибки в прог-
рамме. free игнорирует несуразные указатели.
Пример
Рекомендация
Смотрите также calloc, malloc, realloc.
_____________
матфак вгу и остальная классика =)
vedro-compota
Thu, 10/20/2011 - 15:59
Permalink
но приведённый выше код
но приведённый выше код оказывается неправильным и не сработает , если размер блока окажется меньше, ем длина читаемой строки, подробнее ,причина в том, что при каждой итерациях, с номером >1 мы будем затирать строку result командой =
так как начала областей памяти, на которые указывают result и block могут совпадать.
Подробнее читайте здесь = http://www.daniweb.com/software-developm...
мы же теперь рассмотрим исправленный пример (источник = http://www.daniweb.com/software-developm...)
_____________
матфак вгу и остальная классика =)
vedro-compota
Thu, 10/06/2011 - 21:42
Permalink
вот оно - без всяких системных констант
чтение строки любого (произвольного) размера в си (размер блока определён заранее - но вы всегда можете переписать эту функцию - добавив в список параметров размерность читаемого "куска") =
_____________
матфак вгу и остальная классика =)
tata_la
Thu, 12/01/2011 - 16:18
Permalink
ну-ну) ещё бы поменьше
ну-ну) ещё бы поменьше лишнего)
_________ _ _ ______
dthcbz фкн вгу and co