Scroll to navigation

gets(3) Library Functions Manual gets(3)

ИМЯ

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

LIBRARY

Standard C library (libc, -lc)

СИНТАКСИС

#include <stdio.h>
[[deprecated]] char *gets(char *s);

ОПИСАНИЕ

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

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

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

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

АТРИБУТЫ

Описание терминов данного раздела смотрите в attributes(7).

Интерфейс Атрибут Значение
gets() Безвредность в нитях MT-Safe

СТАНДАРТЫ

C89, C99, POSIX.1-2001.

LSB deprecates gets(). POSIX.1-2008 marks gets() obsolescent. ISO C11 removes the specification of gets() from the C language, and since glibc 2.16, glibc header files don't expose the function declaration if the _ISOC11_SOURCE feature test macro is defined.

ДЕФЕКТЫ

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

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

СМ. ТАКЖЕ

read(2), write(2), ferror(3), fgetc(3), fgets(3), fgetwc(3), fgetws(3), fopen(3), fread(3), fseek(3), getline(3), getwchar(3), puts(3), scanf(3), ungetwc(3), unlocked_stdio(3), feature_test_macros(7)

ПЕРЕВОД

Русский перевод этой страницы руководства был сделан Azamat Hackimov <azamat.hackimov@gmail.com>, Dmitry Bolkhovskikh <d20052005@yandex.ru>, Vladislav <ivladislavefimov@gmail.com>, Yuri Kozlov <yuray@komyakino.ru> и Иван Павлов <pavia00@gmail.com>

Этот перевод является бесплатной документацией; прочитайте Стандартную общественную лицензию GNU версии 3 или более позднюю, чтобы узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ.

Если вы обнаружите ошибки в переводе этой страницы руководства, пожалуйста, отправьте электронное письмо на man-pages-ru-talks@lists.sourceforge.net.

15 декабря 2022 г. Linux man-pages 6.02