谁来帮帮我呀,关于try{}catch(...){}

fencer2004 2004-12-22 12:26:04
我想通过try{}catch(...){},来拦截下面的错误但不行,因为CONTENT正常情况下长度是100多,但不能通过获取长度来处理,我想请教怎么才拦截任意错误,如:
CString CONTENT,info;
CONTENT="01234567890";
try{ info.Format("%s-%s\3",CONTENT.Mid(61,3),CONTENT.Mid(93,3));
}catch(...)
{info="RPERROR-999";
}
MessageBox(info);
...全文
136 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
fencer2004 2005-08-04
  • 打赏
  • 举报
回复
到现在我还是没搞定,认有没有具体能解决的代码
nicknide 2004-12-22
  • 打赏
  • 举报
回复

__try
{
}
__final
{
}

try catch 只能够捕获语言中用throw抛出的异常,结构化异常无法捕获,而且也不清楚你这个地方到底是什么反映,断言错误也是无法捕获的。
fencer2004 2004-12-22
  • 打赏
  • 举报
回复
不能通过获取长度来处理,
wujian53 2004-12-22
  • 打赏
  • 举报
回复
try{}
catch(...){}
必须是try{}中的语句有throw 异常才起作用;
不是万能的, 也没有万能的;

你应该通过其他途径来解决问题;
你这里可以先判断长度;
比如长度不够, 你再info="RPERROR-999";
长度够就info.Format("%s-%s\3",CONTENT.Mid(61,3),CONTENT.Mid(93,3));

sharkhuang 2004-12-22
  • 打赏
  • 举报
回复
有些异常是抓不到的!比如除0等。需要_try _except
wujian53 2004-12-22
  • 打赏
  • 举报
回复

你这里 CONTENT.Mid(61,3),CONTENT.Mid(93,3));
如果CONTENT小于93你肯定失败;

if(CONTENT.GetLength() < 93)
info = "RPERROR-999";
else
info.Format("%s-%s\3",CONTENT.Mid(61,3),CONTENT.Mid(93,3));
nicknide 2004-12-22
  • 打赏
  • 举报
回复
到这个地方后,弹出错误框,终止,重试,忽略,鼠标忽略后,程序继续执行:

这个地方不是异常,是断言错……

鉴定完毕,楼主如果希望捕获异常的话,可以在relase版本中捕获访问异常之类的SEH异常。
DEBUG模式Assert打开是经过断言了的。

鉴定完毕,建议楼主可以节贴收工……
fencer2004 2004-12-22
  • 打赏
  • 举报
回复
因为CONTENT是不定长的
wujian53 2004-12-22
  • 打赏
  • 举报
回复
CString 不能通过获取长度来处理?
什么理由?
fencer2004 2004-12-22
  • 打赏
  • 举报
回复
到这个地方后,弹出错误框,终止,重试,忽略,鼠标忽略后,程序继续执行

64,666

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧