gets函数容易发生越界错误,已经看到好多书、文章提到这一点。在写输入时就采用fgets函数,发现函数虽小,没理解透还是问题多多。
char *fgets(char *s, int n, FILE *stream);
问题1:FILE *stream 参数误用STDIN_FILENO
代码:
将输入打印出来,执行这个程序:
分析:STDIN_FILENO是头文件<unistd.h>中定义的宏,数据类型是int,属于系统调用接口中标准输入的文件描述符,是没有缓存的I/O。
fgets函数中第三个参数类型为FILE *,FILE是一个数据结构用于访问一个流。stdin,stdout,stderr都是指向FILE结构的指针。
修改代码fgets(s1,10,stdin);再运行:
输入fuck,输出fuck。
问题2:输入字符串长度小于参数n
代码: