为什么不能捕获字符串转数字的异常?
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,这样调试很方便的