您的位置:程序门 -> vc/mfc -> 基础类



为什么不能捕获字符串转数字的异常?


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


为什么不能捕获字符串转数字的异常?[已结贴,结贴人:minji]
发表于:2007-07-04 09:51:21 楼主
cstring   str1   =   "abcd ";
try
{
int   x   =   atoi(str1);
}
catch(cexception   e)
{
afxmessagebox( "数据错误: ");
}
以上代码有什么问题?为什么运行中没有捕获到异常?谢谢!
发表于:2007-07-04 09:57:391楼 得分:5
这好像没有异常吧,atoi是按照前n(包括0个)个数字转换的,如atoi( "12ad34df ")   =   12;
发表于:2007-07-04 10:02:462楼 得分:5
atoi从-或者数字开始
发表于:2007-07-04 11:39:533楼 得分:0
那么如何判断atoi(str1)字符串中是否包含非数字的字符呢?谢谢
发表于:2007-07-04 12:34:294楼 得分:5

      这好像没有异常吧,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。
发表于:2007-07-04 12:46:015楼 得分:5
不要抛异常了,直接if()else   跟afxmessagebox,这样调试很方便的


快速检索

最新资讯
热门点击