首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

关于scanf和printf字符串的有关问题

2012-04-17 
关于scanf和printf字符串的问题程序如下,运行环境为vc6:int main(){char a[5]char b[5]while(1){printf(

关于scanf和printf字符串的问题
程序如下,运行环境为vc6:
int main()
{
char a[5];
char b[5];
while(1)
{
printf("input a:");
scanf("%s",a);
printf("output a:%s\n",a);
printf("input b:");
scanf("%s",b);
printf("output a:%s\n",a);
printf("output b:%s\n",b);
}
}
为什么我输入超过5个字符超过的部分还是会打印出来?还有,当b输入超过7个字符时a的内容也受到影响?

[解决办法]
楼主不要过分纠结结果。因为
char a[5];
char b[5];
只分别分配了5个元素的空间。你一下子输入多于5个则会发生数组越界,有可能操作系统分配空间是a,b是相邻的,所以a,b之间才会出现了影响。
你把改大点就没事了。
char a[500];
char b[500];


[解决办法]
scanf("%s",a);
应改为
fgets(a,5,stdin);if ('\n'==a[strlen(a)-1]) a[strlen(a)-1]=0;

scanf("%s",b);
应改为
fgets(b,5,stdin);if ('\n'==b[strlen(b)-1]) b[strlen(b)-1]=0;
[解决办法]

探讨

运行结果是这样的:
第一种情况:
input a:aaaaaa(6个a)
显示output a:aaaaaa
input b:bbbbbb(6个b)
显示output a:aaaaaa
显示output b:bbbbbb

第二种情况:
input a:aa
显示output a:aaaaaa
input b:bbbbbbbbbb(10个b)
显示output a:bb
……

[解决办法]
越界的说,别这么写,栈溢出了

热点排行