关于fgets的理解
Posted 9527s
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于fgets的理解相关的知识,希望对你有一定的参考价值。
gets()函数
因为用gets函数输入数组时,只知道数组开始处,不知道数组有多少个元素,输入字符过长,会导致缓冲区溢出,多余字符可能占用未使用的内存,也可能擦掉程序中的其他数据,后续用fgets函数代替。
fgets函数
一小段代码举例:
1 char words[stlen]; 2 fgets(words,10,stdin); 3 fputs (words,stdout); 4 puts(words);
(1) fgets函数一次读入10 - 1个字符,如果少于这个字符数数按下回车
例如输入apple pie 则会将apple pie 储存在数组中
随后的fputs打印时不添加
而puts打印会添加 ,结果会空一行
(2) 一次读入超过10 - 1个字符则会在读取apple pie后加 储存在数组中
打印时因为没有 函数fputs之后没有换行,紧接着puts打印
fgets()函数读到文件结尾会返回一个空指针,代码可用0代替,或者用NULL //因为暂时不常见在此不做介绍
在11.8中
# include<stdio.h>
# define stlen 10
int main(void)
{
char words[stlen];
while(fgets(words,stlen,stdin) != NULL&&words[0] != ‘
‘)//不断循环把stlen-1字符放在数组中加 ,直到最后结尾为
,
fputs(words,stdout);
puts("done.");
return 0;
}
输入字符长度超过 10-1 时仍会全部打印,因为输入缓冲区的原因,输入aaaaaaaaabbbbbbbbbccccccccc,字符串会在缓冲区暂时保存,第一次while会将aaaaaaaaa输出但没有换行,
第二次时bbbbbbbbb,最后的c结束时会将ccccccccc 储存打印时会换行。
储存换行符有好处也有坏处,想去除换行符,可以在已知的字符串中查找换行符,
while (words[i] != ‘ ‘)
i++;
word[i] = ‘ ‘;
如果仍有字符串留在输入行就用
while(getchar() != ‘
‘)//读取但不储存输入,包括
continue;
这样可以清除缓冲区,超过设定长度会将后面的清除,只打印设定长度字符串。
1 # include<stdio.h>
2 # define stlen 10
3 int main(void)
4 {
5 char words[stlen];
6 int i;
7 while(fgets(words,stlen,stdin) != NULL&&words[0] != ‘
‘)
8 {
9 i = 0;
10 while(words[i] != ‘
‘&&words[i] != ‘