c fgets函数数报错 求助各位大大

gets和fgets&注意溢出的情况
fgets()函数的基本用法为: fgets(char * s,int size,FILE * stream);
1.第一个参数为将被赋值的数组名。注意,不用写数组名称后面的方括号以及其中的数组长度。
2.第二个参数是将要读取字符串的长度。注意,这里长度的数值是“字符串实际长度+1”,因为,字符串最后面还有'/0'。
3.最后一个参数为输入设备或者变量。一般情况下,我们都是从键盘输入,即stdin。(从文件读取的这里暂不说明)
例: #include&int
char ch[80];
int i=0,count=0,flag=0;
fgets(ch,80,stdin);
fputs(ch,stdout);
for (i=0;ch[i]!='\0';i++)
{ if (ch[i]==' ') flag=0;
else if (flag==0)
{ flag=1; count++; }
printf("%d\n",count);
这段代码的工作原理是,使用一个用于标识的变量flag,还有一个用于统计单词个数的变量count。然后逐一读取字符串中的每一个字符,当遇到字母时flag的值为1,当遇到空格时,flag的值为0。如果遇到一个字母,并且此时flag值为0(说明这个字母之前的一个字符是空格),给count加1,直到遇到空格时,将flag重新赋值为0。
在fgets()使用中需要注意,其中第二个参数规定的字符串长度应该与字符串长度相等,否则运行程序时会有溢出的错误。当输入的字符串大于限定的字符串长度时(本例中限定的是80),限定长度之后的字符串会被丢弃。
另外,在C语言,常用的同类函数还有fscan()和gets()。不过这两种函数都有其缺点,或者可以说是制约性。
fscan()函数不能读取带有空格的字符串。当字符串中含有空格时,函数只能读取空格之前的字符串,空格之后的全部忽略。
gets()函数虽然可以操做带有空格的字符串,不过容易引起溢出。因为C语言是将字符串当做一种数组操做的,既然是数组,就有长度,如果gets()函数读取的字符串长度大于被赋值数组的长度,就会引起溢出。而且新版的GCC已经不能正确编译gets()函数了,会报错。
补充: fgets (buf, size, fp)
其行为方式如下:
(1)遇到换行或文件结束EOF则返回。
(2)按行读取。
(3)每一行结束处的换行字符‘\n’也算该行字符。
(4)对于大小为size的buf,最多只读取size-1个字符。
(5)自动地把buf中最后一个字符(通常是换行符)的后面一个字节填充零结束符('\0')。
因此如果想把buf中的换行符去掉,可以这样:buf[strlen(buf)-1] =
'\0';当前前提是buf足够大,可以容纳完整的一行(包括最后的那个换行符)。
fputs (str, fp)
(1)把str中零结束符之前的全部文字输入到文件中。
(2)输入完成后,不会增加额外的特殊字符,如换行符等。
如果想输入完str后,就换行,则应该在上述调用后,再调用fputc('\n',fp);才行。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。FILE *
char str[1000];
fp=fon(szFile,"r");
while(fgets(str,sizeof(str),fp)){
SetDlgItemText(hwnd,IDC_EDIT1,str);
LANGUAGE="JavaScript"&
="网页可见区域宽:"+
document.body.clientWi...
在数据表中,用鼠标选中某一列后点击鼠标右键,弹出菜单。选 Set Column Values,然后在白色框中编辑你想好的函数关系式,式子中的 “变量” 用Col...
两个20以内数的乘法 两个20以内数相乘,将一数的个位数与另一个数相加乘以10,然后再加两个尾数的积,就是应求的得数。如12×13=156,计算程序是将12的尾...
不上传工作表,无法帮忙!
它没有真正交换。如果想让它真正交换,应该使用:
void swap(int &a,int &b)
t=a; a=b; b...
大家还关注
确定举报此问题
举报原因(必选):
广告或垃圾信息
激进时政或意识形态话题
不雅词句或人身攻击
侵犯他人隐私
其它违法和不良信息
报告,这不是个问题
报告原因(必选):
这不是个问题
这个问题分类似乎错了
这个不是我熟悉的地区2012年11月 挨踢职涯大版内专家分月排行榜第二2011年9月 Linux/Unix社区大版内专家分月排行榜第二
2012年1月 Linux/Unix社区大版内专家分月排行榜第三2011年8月 C/C++大版内专家分月排行榜第三2011年8月 Linux/Unix社区大版内专家分月排行榜第三2010年4月 C/C++大版内专家分月排行榜第三
2012年11月 挨踢职涯大版内专家分月排行榜第二2011年9月 Linux/Unix社区大版内专家分月排行榜第二
2012年1月 Linux/Unix社区大版内专家分月排行榜第三2011年8月 C/C++大版内专家分月排行榜第三2011年8月 Linux/Unix社区大版内专家分月排行榜第三2010年4月 C/C++大版内专家分月排行榜第三
2013年7月 Linux/Unix社区大版内专家分月排行榜第二2012年6月 Linux/Unix社区大版内专家分月排行榜第二2011年5月 Linux/Unix社区大版内专家分月排行榜第二2011年4月 Linux/Unix社区大版内专家分月排行榜第二2011年3月 Linux/Unix社区大版内专家分月排行榜第二2010年10月 Linux/Unix社区大版内专家分月排行榜第二2010年9月 Linux/Unix社区大版内专家分月排行榜第二
2011年9月 Linux/Unix社区大版内专家分月排行榜第三2010年12月 Linux/Unix社区大版内专家分月排行榜第三2010年11月 Linux/Unix社区大版内专家分月排行榜第三2010年9月 C/C++大版内专家分月排行榜第三
2011年8月 移动平台大版内专家分月排行榜第二2011年7月 移动平台大版内专家分月排行榜第二2011年3月 移动平台大版内专家分月排行榜第二
2012年8月 移动平台大版内专家分月排行榜第三2012年7月 移动平台大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。}

我要回帖

更多关于 fgets函数返回值 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信