因为在C语言里面,以数字0打头的数字串被解释为8进制数,由于8进制数中最大的数字是7(就像10进制中最大的数字是9一样),而09被解释成为8进制数显然不对,所以error说9是在8进制下是非法数字。注意到02,06,07等显然没有问题,这些数字都小于等于7。要解决这个问题并不难,把09改成0x09就可以了,0x09是以0x打头,C语言解释成16进制数,就是说现在允许出现在某一数位上的最大数字是F(16进制下表示10进制的15),9显然符合要求。其实这样的写法没太大作用,printf打印的时候不会打印出打头的0的,对于02,05,07之类倒还可以通过%#o说明符做到,但是0x09办不到,建议把年月日都声明为字符串(printf里面相应的%d改成%s)。当然还有其他办法,不过这个是最直接的。
error C2041: illegal digit '8' for base '8' 就是说8在八进制下是非法数字。