http siluke.tw:关于 TurboC 程序导致非法操作的问题

来源:百度文库 编辑:神马品牌网 时间:2024/04/29 21:43:04
用 TC 编一个程序,输入一个字符串存到字符串数组中,类似以下的代码:

#include <stdio.h>
main
{
char a[10];
gets(a);
printf("%s",a);
}

这本是一个输入字符串并进行显示的简单程序,但是其中有个问题,就是如果输入的字符串长于字符数组的元素个数(本例是10),就会出现“该程序执行了非法操作,即将关闭”的问题,请问这种情况如何避免呢??希望高手指点。

补充:用 Scanf 函数限定输入字符的个数不会产生非法操作,但是,Scanf函数把多余的字符再次进行了处理(也就是显示了两次,前一次是输入的前10个字符,后一次是剩余的那些字符)这种情况能否避免呢?

初学 C 语言,望高手指点。
fflush(stdin);的确能解决我的问题,可是“危险”从何说起??难道这个东西不稳定吗??能否详细说一下这个函数的缺点??

其实gets()在C语言里用得不多,可以用scanf(不过scanf忽略空格),在下次输入前用fflush( stdin )来刷新输入缓存就可以了(zhiqiang124说得对,用fflush(stdin)有危险,一般不要这样用)。也可以这样用(推荐):
char c,a[10];
int i=0;
while((c=getchar())!='\n')
{
if(i<9) a[i++]=c;
}
a[i]='\0';
这样将前9个字符存到数组中并忽略了该行后面的输入。

楼上的:用fflush( stdin )有危险!!