Gets c что это за программа

Функция gets() считывает символы из stdin и помещает их в массив символов, на который ука­зывает str. Символы считываются до тех, пока не встретится новая строка или EOF. Символ «но­вая строка» не делается частью строки, а транслируется в нулевой символ, завершающий строку.

В случае успеха gets() возвращает str, в противном случае она возвращает NULL. В случае ошиб­ки по чтению содержимое массива, на который указывает str, не определено.

Поскольку NULL возвращается как в случае ошибки, так и при достижении конца файла, то следует использовать feof() или ferror(), чтобы выяснить, что именно произошло.

Количество символов, считываемых gets(), не ограничивается. Поэтому программист должен сам следить за тем, чтобы не выйти за границы массива, на который указывает str.

В данной программе gets ( ) используется для чтения имени файла :
#include
#include
int main ( void )
{
FILE * fp ;
char fname [ 128 ] ;
printf ( «Enter filename: » ) ;

Vulnerabilities of the gets function in C


gets ( fname ) ;
if ( ( fp = fopen ( fname , «r» ) ) == NULL ) {
printf ( «Cannot open file. n » ) ;
exit ( 1 ) ;
}
.
fclose ( fp ) ;
return 0 ;
}

Источник: www.c-cpp.ru

Функция gets

Получить строку из стандартного потока ввода. Функция gets считывает символы из стандартного потока ввода до символа новой строки n или до тех пор, пока не будет достигнут конец файла EOF , после чего сохраняет считанные символы в строку типа char .

Символ новой строки n не копируется в строку.

Нулевой символ автоматически добавляется после последнего копируемого символа в string , чтобы сигнализировать о конце строки.

Обратите внимание, что функция gets несколько отличается от функции fgets , во-первых возвращает строку из стандартного потока ввода в качестве аргумента, а, во-вторых, конечный символ новой строки не входит в её состав . в отличие от fgets . А ещё, gets не позволяет установить ограничение на количество считываемых символов, поэтому нужно быть осторожными с размером массива, на который указывает параметр str , чтобы избежать переполнения буфера.

Читайте также:
Ebay worldwide что это за программа и нужна ли она на компьютере

Параметры:

  • string
    Указатель на массив типа char , в котором сохраняется строка.

Возвращаемое значение

В случае успеха, функция возвращает тот же параметр, string . Если происходит ошибка, возвращается нулевой указатель.
Используйте функции ferror или feof для проверки внутренних состояний показателей ошибки или конца файла — EOF .

Пример: исходный код программы

//пример использования функции gets #include #include int main() < char string [256]; std::cout << «Введите свой полный адрес: «; gets(string); // считать строку из стандартного потока ввода std::cout

Источник: cppstudio.com

C Programming Tutorial — 67: The gets() and puts() Functions

gets, gets_s

c

1) Считывает стандартный stdin в массив символов, на который указывает str , до тех пор, пока не будет найден символ новой строки или не произойдет конец файла. Нулевой символ записывается сразу после последнего символа, считанного в массив. Символ новой строки отбрасывается, но не сохраняется в буфере.

  • n равно нулю
  • n больше чем RSIZE_MAX
  • str — нулевой указатель
  • endline или eof не обнаружены после сохранения n-1 символов в буфере.

Parameters

str строка символов для записи

Return value

str в случае успеха, нулевой указатель в случае неудачи.

Если сбой был вызван состоянием конца файла,дополнительно установите параметр eof индикатор (см. feof() ) на stdin . Если сбой был вызван какой-либо другой ошибкой, устанавливает error индикатор (см. ferror() ) на stdin .

Notes

Функция gets() не выполняет проверку границ, поэтому эта функция чрезвычайно уязвима для атак переполнения буфера. Его нельзя безопасно использовать (если только программа не работает в среде, которая ограничивает то, что может появиться в stdin ) По этой причине эта функция устарела в третьем исправлении к стандарту C99 и вообще удалена в стандарте C11. fgets() и gets_s() — рекомендуемые замены.

Читайте также:
Для чего нужна программа офис ворд

Никогда не используйте gets() .

References

  • Стандарт C11 (ISO/IEC 9899:2011):
  • K.3.5.4.1 Функция get_s (стр.602-603)
  • 7.19.7.7 Получает функцию (стр.298)
  • 4.9.7.7 Получает функцию

Источник: runebook.dev

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru