首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

为什么不能捕获字符串转数字的错误

2012-02-09 
为什么不能捕获字符串转数字的异常?CStringstr1abcd try{intxatoi(str1)}catch(CExceptione){AfxMes

为什么不能捕获字符串转数字的异常?
CString   str1   =   "abcd ";
try
{
int   x   =   atoi(str1);
}
catch(CException   e)
{
AfxMessageBox( "数据错误: ");
}
以上代码有什么问题?为什么运行中没有捕获到异常?谢谢!

[解决办法]
这好像没有异常吧,atoi是按照前n(包括0个)个数字转换的,如atoi( "12ad34df ") = 12;
[解决办法]
atoi从-或者数字开始
[解决办法]

这好像没有异常吧,atoi是按照前n(包括0个)个数字转换的,如atoi( "12ad34df ") = 12;
--------------------------------------------
正解。没有异常。即使有异常,处理方式也应该是这样的:
CString str1 = "abcd ";
__try
{
int x = atoi(str1);
}
__except(EXCEPTION_EXECUTE_HANDLER)
{
AfxMessageBox( "数据错误: ");
}

atoi()是C/C++语言运行库函数,是绝不会抛出MFC定义的异常类型CException的。如果函数运行中出现了问题(例如,假定atoi函数不能正确出入传入空指针的情形),可以用Windows的结构化异常处理机制进行处理。
对于Windows编程,建议使用StrToIntEx()函数。使用这个函数时,要在源代码文件开头处加上:
#include <shlwapi.h>
#pragma comment(lib, "shlwapi.lib ")
详情见MSDN。
[解决办法]
不要抛异常了,直接if()else 跟AfxMessageBox,这样调试很方便的

热点排行