回复 6楼 QQ346957135
能具体点吗?我不太懂!求详解
这回不会杯具了!
会楼主的问题!
首先呢,要搞清楚 gets()的用法,如果书上没有,就百度,谷歌都可以
【1】函数:gets(字符指针)
【2】头文件:string.h(c中),c++不需包含此头文件
【3】原型:char *gets( char *buffer );
【4】功能:从stdin流中读取字符串,直至接受到换行符或EOF时停止,并将读取的结果存放在buffer指针所指向的字符数组中。换行符不作为读取串的内容,读取的换行符被转换为null值,并由此来结束字符串。
【5】返回值:读入成功,返回与参数buffer相同的指针;读入过程中遇到EOF(End-of-File)或发生错误,返回NULL指针。所以在遇到返回值为NULL的情况,要用ferror或feof函数检查是发生错误还是遇到EOF。
【6】注意:本函数可以无限读取,不会判断上限,所以程序员应该确保buffer的空间足够大,以便在执行读操作时不发生溢出。如果溢出,多出来的字符将被写入到缓冲区后面的内存位置,这将破坏一个或多个不相关变量的值。这个事实导致gets函数只适用于玩具程序
[来源:百度百科]
有了原型我们就知道怎么用他了
gets(字符型内存地址buffer);把从键盘输入的内容写到从buffer所指的地址开始以后的空间中!
所以,你的 gets(name[i]); 根据你程序中的定义
char *name[3]; 这是什么? 按优先顺序结合一下 char*(name[3]) 对吧?
首先定义了一个name[3]数组,这个数组是存放的是指针,该指针所指地址的内容是char型数据,
所以name[3]里分别存放了3个地址!!但由于你没有给name数组初始化,所以此时里面的数据是什么?只能回答说:不知道这些地址是指向哪里 的!
所以编译可以通过,执行就会有问题,运气好的好不会报错,运气不好程序崩溃(大多情况下要崩溃)!
因此,只要给name[3]分别赋给一个安全地址,程序就ok了,你的程序没有什么大问题,估计是漏定义一些变量!
那好办,补上就完事大吉了!
在char *name[3];的后面补!
char str[3][100]={0};//你懂的
然后是:
//printf("please enter three name:");//界面效果不好,不要了
for(i=0;i<3;i++)
{
printf("please enter name[%d]:",(i+1));//在这里加了一句,
name[i]=str[i]; //这个不用多说了吧,大家都知道的
gets(name[i]); //这就没问题了!
}
现在程序是可以运行了,但别忘记
【6】注意:本函数可以无限读取,不会判断上限,所以程序员应该确保buffer的空间足够大,以便在执行读操作时不发生溢出!
所以我定义了个100,哈哈没谁的名字会有100个字符吧,不过也难讲!
希望对楼主能有帮助,哈哈!
如有不对之处,见谅见谅!娱乐一下吗!