W2A堆栈溢出

数据统计工具制作小结--W2A堆栈溢出

在测试大数据量的时候,因为我的程序最后要生成一个excel报表,可是每次打开的时候,explorer.exe就报错,我在想,我又没惹你,你怎么不给打开呢,难道是我用的ODBC数据操作有误?想想不对,数据不大的时候怎么没事呢?没办法,拿个大数据文件debug吧!结果好不容易遇到一个CString错误,说程序溢出,当时忙着改错,没有记录下来错误描述。记得那个长长的错误提示中包含有W2A字样,好!因为我用到了W2A的宏!立马回忆起来曾经用它时遇到的问题,查了一下MSDN,《TN059: Using MFC MBCS/Unicode Conversion Macros  》,Link:http://msdn.microsoft.com/en-us/library/805c56f8%28VS.80%29.aspx

讲得非常详细,就是W2A是在栈上取得一段内存,在程序结束时栈才会释放取得的栈空间,所以,不能在一个大的循环中使用它,而应该在程序外面专门写一个字符串处理小函数,达到快速、安全转换的目的。

如:

char* CDlgBDLXSM::CStringToChar( CString str )
{
 char *pszBar;
 int i;
 int wLen = WideCharToMultiByte( CP_ACP,0,str,-1,NULL,0,NULL,NULL );
 pszBar = new char[wLen+1];
 WideCharToMultiByte(CP_ACP,0,str,-1,pszBar,wLen,NULL,NULL );
 pszBar[wLen+1] = '\0';
 return pszBar;

}

posted on 2013-09-28 12:35  langgonger  阅读(560)  评论(0)    收藏  举报

导航