C中的fgets()函数

emi*_*ily 13 c stdin std fgets

我知道每个人都告诉我使用fgets而不是因为缓冲区溢出而得到的.但是,我对第三个参数感到有点困惑fgets().据我了解,fgets依赖于:

char * fgets ( char * str, int num, FILE * stream );
Run Code Online (Sandbox Code Playgroud)

char* str 是我的输入将存储在哪里的ptr.

num 是要读取的最大字符数.

但是什么FILE *stream?如果我只是提示用户输入字符串(如句子),我应该输入" stdin"吗?

我应该键入FILE *stdin顶部,靠近main()吗?

Car*_*rum 16

你是对的. stream是一个FILE结构的指针,就像从中返回的那样fopen. stdin,, stdoutstderr已经为您的程序定义,因此您可以直接使用它们,而不是自己打开或声明它们.

例如,您可以从标准输入中读取:

fgets(buffer, 10, stdin);
Run Code Online (Sandbox Code Playgroud)

或者从特定文件中:

FILE *f = fopen("filename.txt", "r");
fgets(buffer, 10, f);
Run Code Online (Sandbox Code Playgroud)