gets(3) получает строку из стандартного потока ввода (УСТАРЕЛА)

ОБЗОР

#include <stdio.h>


char *gets(char *s);

ОПИСАНИЕ

Никогда не используйте эту функцию.

Функция gets() считывает строку из stdin и записывает её в буфер, на который указывает s, пока не встретится символ новой строки или EOF, которые заменяются байтом null ('\0'). Проверка на переполнение буфера не производится (смотрите ДЕФЕКТЫ далее).

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

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

АТРИБУТЫ

Описание терминов данного раздела смотрите в attributes(7).
ИнтерфейсАтрибутЗначение
gets() безвредность в нитяхбезвредно (MT-Safe)

СООТВЕТСТВИЕ СТАНДАРТАМ

C89, C99, POSIX.1-2001.

В LSB функция gets() указана как устаревшая. В POSIX.1-2008 функция gets() как вышедшая из употребления. В ISO C11 описание gets() удалено из языка Си, и начиная с версии 2.16, заголовочные файлы glibc не объявляют эту функцию, если не определён макрос тестирования свойств _ISOC11_SOURCE.

ДЕФЕКТЫ

Никогда не используйте gets(), потому что без предварительного знакомства с данными невозможно узнать, какое количество символов считает gets(), а также потому, что gets() будет продолжать заносить символы в буфер даже по достижении его конца, что представляет собой большую опасность. Эта функция использовалась для взлома систем безопасности компьютера. Вместо этой функции используйте fgets().

Подробное описание смотрите в CWE-242 (или «Use of Inherently Dangerous Function») на http://cwe.mitre.org/data/definitions/242.html