gets






gets − полÑÑÐ°ÐµÑ ÑÑÑÐ¾ÐºÑ Ð¸Ð· ÑÑандаÑÑного
поÑока ввода (УСТÐÐ ÐÐÐ)


#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() бÑÐ´ÐµÑ Ð¿ÑодолжаÑÑ
заноÑиÑÑ ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ Ð² бÑÑÐµÑ Ð´Ð°Ð¶Ðµ по
доÑÑижении его конÑа, ÑÑо









                             ‐2‐


пÑедÑÑавлÑÐµÑ Ñобой болÑÑÑÑ Ð¾Ð¿Ð°ÑноÑÑÑ. Ð‐
Ñа ÑÑнкÑÐ¸Ñ Ð¸ÑполÑзовалаÑÑ Ð´Ð»Ñ Ð²Ð·Ð»Ð¾Ð¼Ð°
ÑиÑÑем безопаÑноÑÑи компÑÑÑеÑа. ÐмеÑÑо
ÑÑой ÑÑнкÑии иÑполÑзÑйÑе 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)