今天在翻《C语言参考手册》查看文件操作的相关函数时,看到fgets() 与 gets()的一些“微妙”的地方
另外《C语言参考手册》是C程序员身边的一本非常好的“词典”,刚开始学习C的时候,或许用不上这书(只因为初学者对里面的内容看得不是很明白)但是觉得自己学到有一定程度的时候,这本书绝对是一本十分好的工具书!
题外话就到此为止,入正题:
这篇文章主要简单地说说 fgets() 和 gets()
首先看看函数原型:
char* fgets(char *s, int n, FILE *stream);
char* gets(char *s);
一般使用 fgets函数,都是读取 文件当中的 n-1个字符到 s中,其实, 此函数还有一个很好的用处就是从标准输入流中读取字符串,而且不用担心输入的字符个数超出了字符数组的大小而导致溢出的问题!要怎样做呢?如下:
char str[10];
fgets(str, siezof(str), stdin);
而如果使用gets函数的话,就不能保证上述的问题不会出现(输入的字符个数超出了字符数组的大小而导致溢出) 不信你可以运行下面的代码:
char str[10];当然你得输入 10个以上的字符才能看到问题
gets(str);
到这里,fgets()的好处就不用再详细说了。值得注意的是:谨记fgets()只读取n-1个字符。所以,fgets()读取到换行符、文件尾或读完n-1个字符便会进行返回