首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >异常处理

异常处理
EN

Stack Overflow用户
提问于 2010-09-30 07:15:59
回答 5查看 1.6K关注 0票数 1

我得到以下核心转储消息:

在引发'std::out_of_range‘what()的实例后调用terminate : basic_string::substr中止核心转储

我正在从一个大文件中读取一个14位的十六进制数。我经常注意到有这些空行(我不确定它是什么。如何处理此异常?也许可以试着抓一抓东西?它看起来像下面这样:

代码语言:javascript
复制
123456789ABCDE
123456789ABCDE
123456789ABCDE

123456789ABCDE

我不确定是什么隐藏的符号占据了这个空间,但它引起了问题,我不确定如何处理this..any的想法?也许我可以得到一个如何处理它的样本?

EN

回答 5

Stack Overflow用户

发布于 2010-09-30 09:43:22

您需要发布更多的代码,但从异常中可以看出,您正在逐行读取文件并将该行存储在std::string中,然后调用std::string::substr()来提取所需的14个字符。

假设您的代码如下所示:

代码语言:javascript
复制
std::string str;         /* the lines are stored in this string */
std::string substring;   /* extracted substring stored here */

/* Read file line by line */
// ...

substring = str.substr( index, 14 );  //extract 14 characters starting at 'index'

将其更改为:

代码语言:javascript
复制
if( str.size() > index ) {
  substring = str.substr( index, 14 );
}
票数 3
EN

Stack Overflow用户

发布于 2010-09-30 07:29:03

在尝试转换之前,您可能需要包含输入验证。永远不要按原样接受外部输入并始终进行验证。

票数 1
EN

Stack Overflow用户

发布于 2010-09-30 07:38:36

波斯特尔定律( Robustness principle ):

发送的内容要保守,接受的内容要大方。

因此,一种可能是忽略/跳过格式错误的行。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3826570

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档