fgets () функционируют в C

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

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

char* str ptr туда, где мой вход будет сохранен.

num макс. количество символа, который будет считан.

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

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

13
задан Community 22 February 2018 в 16:53
поделиться

4 ответа

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

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

fgets(buffer, 10, stdin);

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

FILE *f = fopen("filename.txt", "r");
fgets(buffer, 10, f);
16
ответ дан 1 December 2019 в 22:23
поделиться

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

.
1
ответ дан 1 December 2019 в 22:23
поделиться

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

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

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

2
ответ дан 1 December 2019 в 22:23
поделиться

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

.
3
ответ дан 1 December 2019 в 22:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: