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);
空间用动态的好
最近模仿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);
空间用动态的好