看下面小程序及输出:


=time(NULL);structtm*Local=localtime(t);inty=Local-tm_year+1900;//for(inti=1;i12;i++)//出错jieqiYear(y);ifsystem("pause");}

有问题的函数可以追溯到LunarCalar(),是因为其修改了全局变量LunarCalarDay,该变量的后六位保存的是日期信息(几日),剩下的位保存的是月份信息。且该全局变量在其它函数中有用做数组下标,首次修改可控,多次修改就不可控了。这就是全局变量的危险性,特别是当其用做数组下标,且程序较复杂时。(LunarCalarDay()返回的是农历是否是闰年的信息)

对上面函数可简单将全局变量更改为输出的引用参数即可:


=time(NULL);structtm*Local=localtime(t);inty=Local-tm_year+1900;//for(inti=1;i12;i++)//出错jieqiYear(y);ifsystem("pause");}

--