我得到以下核心转储消息:
在引发'std::out_of_range‘what()的实例后调用terminate : basic_string::substr中止核心转储
我正在从一个大文件中读取一个14位的十六进制数。我经常注意到有这些空行(我不确定它是什么。如何处理此异常?也许可以试着抓一抓东西?它看起来像下面这样:
123456789ABCDE
123456789ABCDE
123456789ABCDE
123456789ABCDE我不确定是什么隐藏的符号占据了这个空间,但它引起了问题,我不确定如何处理this..any的想法?也许我可以得到一个如何处理它的样本?
发布于 2010-09-30 09:43:22
您需要发布更多的代码,但从异常中可以看出,您正在逐行读取文件并将该行存储在std::string中,然后调用std::string::substr()来提取所需的14个字符。
假设您的代码如下所示:
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'将其更改为:
if( str.size() > index ) {
substring = str.substr( index, 14 );
}发布于 2010-09-30 07:29:03
在尝试转换之前,您可能需要包含输入验证。永远不要按原样接受外部输入并始终进行验证。
发布于 2010-09-30 07:38:36
波斯特尔定律( Robustness principle ):
发送的内容要保守,接受的内容要大方。
因此,一种可能是忽略/跳过格式错误的行。
https://stackoverflow.com/questions/3826570
复制相似问题