|
发表于 2003-7-1 22:13:44
|
显示全部楼层
这是你赋值的时候出的错
你的3个char数组都定义的不够大.
第一个定义为5,第二个和第3个都定义成3
这是关键错误,还有year < 10 || year > -1这个判断语句是不对的,应该是year<='9'&&year>='0'
还有主函数里面的&year,&month ,&day,虽然这里没有错,因为在这里year,month,day都已经本身就是数组的 首地址了,再加上取地址符值依然没有变化.但是也许到了别的地方就会出错.
3个数组错误的原因是因为你用的是字符串赋值
scanf("%s",year);
scanf("%s",month);
scanf("%s",day);
按你贴子里面的赋值,
从year 开始,是'2','0','0','2','\0',因为是用的字符串赋值,所以会在后面加上一个结束符'\0',可是scanf并不进行边界检查.
后来的month是,'1','2','\0'这里最后一个month的'\0'把year的第一个字符给擦掉了,结果导致了没有第一个字符,后面的day也使擦掉了month的第一个字符,所以出现了你的结果.而year后面的'\0'擦掉了什么,我们不知道,这是很危险的.
如果你用
2002
2
2
进行赋值,不会出现这个情况,这时候程序运行正确,这种错误往往不好找出来.
其实你这个问题是一个典型的缓冲区溢出的问题,而由于scanf系列的函数不进行边界检查,所以使用的时候要慎重.
建议用一个char类型的指针,而不是自己指定数组大小. |
|