Win32编程中关于static变量的疑惑,该怎么解决

Win32编程中关于static变量的疑惑
最近模仿vcroad那个SDK教程,准备写一个定时关机程序,开始比较顺利,基本框架和界面都完成,现在碰到一个困惑的问题,在窗口回调函数中定义了一个静态的BOOL变量和两个静态整形变量,BOOL变量标识关机记时是否开始,两个整形分别表示设置关机时间的分钟和小时,如:
//Winodw   Callback   function
LRESULT   CALLBACK   WndProc(HWND   hWnd,   UINT   message,   WPARAM   wParam,   LPARAM   lParam)
{
static   int   n_hour,   nminute;//in   this   way,the   vars   are   initialized
SYSTEMTIME   st;
                  static   BOOL   b_IsStart   =   FALSE;//sign   of   the   anyone   of   combo  
                                                                              //had   clicked
...
...
...
}

现在问题是:初始3个变量都为0,但下次进来时,只有nminute整形变量可以保证是上次改变的值,而小时变量和b_IsStart不能保证是上次调用修改的值,且是很怪异的9位数值,估计是读的“垃圾值”,后来把小时变量名改成n_hour后,其就正常了,但这个BOOL变量始终都不能正常保存函数上次调用时修改过的值,甚是郁闷,请高人指点:)


------解决方案--------------------
static char buffer[2];
static char mbuffer[2];
====
在调用itoa时,上面两个变量都越界写了。
------解决方案--------------------
TCHAR time[4];
TCHAR ShutDownTime[4];
====
这个两个也越界了,楼主的程序没有crash么?服了你了!
------解决方案--------------------
机器不可能出错
LZ检查变量范畴
------解决方案--------------------
itoa(nhour, buffer, 10);
空间用动态的好