Функция fgets () в C - PullRequest
       59

Функция fgets () в C

14 голосов
/ 04 января 2010

Я знаю, что все говорили мне использовать fgets, а не get из-за переполнения буфера. Однако меня немного смущает третий параметр в fgets(). Насколько я понимаю, fgets зависит от:

char * fgets ( char * str, int num, FILE * stream );

char* str - это каталог, в котором будут храниться мои данные.

num - максимальное количество символов для чтения.

а что такое FILE *stream? Если я просто предлагаю пользователю ввести строку (например, предложение), я должен просто набрать "stdin"?

И я должен набрать FILE *stdin вверху, рядом с main()?

Ответы [ 4 ]

16 голосов
/ 04 января 2010

Вы правы. stream - указатель на структуру FILE, подобную той, которая возвращается из fopen. stdin, stdout и stderr уже определены для вашей программы, поэтому вы можете использовать их напрямую вместо того, чтобы открывать или объявлять их самостоятельно.

Например, вы можете читать со стандартного ввода с помощью:

fgets(buffer, 10, stdin);

Или из определенного файла с:

FILE *f = fopen("filename.txt", "r");
fgets(buffer, 10, f);
3 голосов
/ 04 января 2010

Да, вы должны просто использовать stdin. Это предопределенный FILE *, который читает со стандартного ввода вашей программы. И это уже должно быть определено, если у вас есть #include <stdio.h> вверху вашего файла (который вам понадобится для fgets).

2 голосов
/ 04 января 2010

В целом существует два способа взаимодействия с файлами в C. Один из них - использовать низкоуровневые системные вызовы, зависящие от ОС, такие как open(), read(), write() и т. Д., Которые работают с дескрипторами файлов. Другой использует FILE структуры, которые используются в функциях библиотеки C, таких как fread(), fwrite() и т. Д., Включая ту, которую вы упомянули выше.

Как и в философии UNIX, все является файлом. Таким образом, даже стандартный ввод (stdin) рассматривается как указатель на структуру FILE.

tl; dr Да, вы должны использовать stdin для FILE* stream при звонке на fgets()

1 голос
/ 04 января 2010

FILE - это стандартный файл C. Да, если вы хотите читать со стандартного ввода, stdin - правильный символ.

...