
求助有关C语言gets()语句的问题
代码如下:#include<stdio.h>voidmain(){chara[20],b[]="theskyisblue.";inti;printf("%s\n",b);...
代码如下:
#include<stdio.h>void main(){ char a[20],b[]="the sky is blue.";int i; printf("%s\n",b); for(i=0;i<10;i++) scanf("%c",&a[i]); a[i]='\0'; gets(b); printf("%s%s\n",a,b);}
执行结果为:
请问这个程序中,为什么b[ ]里的东西被改变了呢?请问这是如何实现的?另外我在for循环中定义循环10次,我输入超过了10个字符它为什么不报错呢?谢谢! 展开
#include<stdio.h>void main(){ char a[20],b[]="the sky is blue.";int i; printf("%s\n",b); for(i=0;i<10;i++) scanf("%c",&a[i]); a[i]='\0'; gets(b); printf("%s%s\n",a,b);}
执行结果为:
请问这个程序中,为什么b[ ]里的东西被改变了呢?请问这是如何实现的?另外我在for循环中定义循环10次,我输入超过了10个字符它为什么不报错呢?谢谢! 展开
2个回答
展开全部
因为你用了gets(b),所以b[]的东西被改变了。当你使用gets(b)的时候,由于在C语言中向函数传递数组时不是通过值传递(我猜你还没有学指针,如果你学了,那么传递数组就是传递数组首元素的指针),函数内对数组的修改对函数外仍然有效,所以gets改变了b[]里的内容。
第二个问题,因为在这个程序里没有进行错误检测,所以就没有错误提示,但只有输入的前10个字符被存入了数组中。
第二个问题,因为在这个程序里没有进行错误检测,所以就没有错误提示,但只有输入的前10个字符被存入了数组中。
追问
诶,不好意思还不是很明白第一个问题,get(b)取走的是数组a里溢出的字符么?还有a[i]='\0';这语句是什么作用呢?谢谢!o(>_<)o ~~
追答
a[i]='\0'的作用是标记字符串a结束。gets(b)取走的是上面scanf没有取走的用户输入,因为上面的scanf只取走了"the flower",剩下的" is red"保存在输入缓冲区内,当你调用gets是,gets发现输入缓冲区内还有字符,于是直接取走输入缓冲区内的字符而不提示用户输入。(同时把用户输入的回车,即'\n',也取走,但不存入b里面)
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询