Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >引起what(): basic_string::_M_replace_aux问题的一个原因以及解决方法

引起what(): basic_string::_M_replace_aux问题的一个原因以及解决方法

作者头像
用户10923276
发布于 2024-11-04 00:10:30
发布于 2024-11-04 00:10:30
14700
代码可运行
举报
运行总次数:0
代码可运行

自己在做一个项目的时候,报了下面的这个问题:

terminate called after throwing an instance of 'std::length_error'   what():  basic_string::_M_replace_aux

经过自己的研究,发现是在读取文件的时候没有加上错误判断。

通过网站直接访问一个服务器中的一个html文件时,对html文件进行修饰的css,js,favicon.ico文件通样也会被请求。但是我对应的保存前端的文件夹中并没有favicon.ico文件,直接给它拼上与html,css,js文件相同的文件路径前缀导致favicon.ico文件路径错误,打开文件失败。

在读取文件内容的代码中加入判断打开文件失败返回的语句即可解决此问题。

本来读取文件内容的代码我是这样写的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 static bool read(const std::string& filename, std::string& body)
    {
        //打开文件
        std::ifstream ifs(filename, std::ios::binary);
        //获取文件大小
        size_t fsize = 0;
        ifs.seekg(0, std::ios::end);
        fsize = ifs.tellg();
        ifs.seekg(0, std::ios::beg);
        //读取文件所有数据
        body.resize(fsize);
        ifs.read(&body[0], fsize);
        if(!ifs.good())
        {
            LOG(ERROR, "file read failed!\n");
            ifs.close();
            return false;
        }
        //关闭文件
        ifs.close();
        return true; 
    }

 加上打开失败判断即可:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 static bool read(const std::string& filename, std::string& body)
    {
        //打开文件
        std::ifstream ifs(filename, std::ios::binary);
        if (ifs.is_open() == false) {
                LOG(ERROR,"%s file open failed!!", filename.c_str());
                return false;
        }
        //获取文件大小
        size_t fsize = 0;
        ifs.seekg(0, std::ios::end);
        fsize = ifs.tellg();
        ifs.seekg(0, std::ios::beg);
        //读取文件所有数据
        body.resize(fsize);
        ifs.read(&body[0], fsize);
        if(!ifs.good())
        {
            LOG(ERROR, "file read failed!\n");
            ifs.close();
            return false;
        }
        //关闭文件
        ifs.close();
        return true; 
    }
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-11-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
C++在线五子棋对战(网页版)项目:实用工具类模块代码实现
#ifndef _M_LOGGER_H_  和 #define _M_LOGGER_H_是预处理器指令,用于防止头文件被重复包含。如果头文件已经被包含了,那么这对指令将会被跳过。
二肥是只大懒蓝猫
2023/10/13
3870
C++在线五子棋对战(网页版)项目:实用工具类模块代码实现
c++输入文件流ifstream用法详解
每个IO 对象都维护一组条件状态 flags (eofbit, failbit and badbit),用来指出此对象上是否可以进行 IO 操作。如果遇到错误—例如输入流遇到了文件末尾,则对象的状态变为是失效,所有的后续输入操作都不能执行,直到错误纠正。
全栈程序员站长
2022/07/02
2K0
c++输入文件流ifstream用法详解
C++通过文件指针获取文件大小
对于读取本地文件,很多时候需要预先知道本地文件的大小在进行读取。网上给出的方案是移动文件指针,计算文件头和文件尾的偏移,计算出文件的大小。但是我总觉得这样做可能会与读取文件一样消耗性能,为了解决这个问题,我写了如下例子验证了一下。
charlee44
2021/11/02
2.9K0
C++ fstream详解[通俗易懂]
C语言里面对文件的操作是通过文件指针,以及一些相关的函数,那么C++中是如何对文件进行操作的呢?没错,就是通过 fstream 这个文件流来实现的。当我们使用#include 时,我们就可以使用其中的 ifstream,ofstream以及fstream 这三个类了(ofstream是从内存到硬盘,ifstream是从硬盘到内存),也就可以用这三个类来定义相应的对象了,这三个类分别代表一个输入文件,一个输出文件,以及一个输入输出文件。Ifstream类支持>>操作符,ofstream类支持<<操作符,fstream类同时支持>>和<<操作符。
全栈程序员站长
2022/11/05
2.1K0
C++字节流与二进制字符串相互转换(一个简单的明文加解密程序)
作为一名程序猿,在我们写文章、文字片段或者一句简短的话语,对外发表或者告之他人时,是否想过带点新意和创意呢?如果想过,那么这篇文章会给你一点帮助。
恋喵大鲤鱼
2018/08/03
2.2K0
c++ fstream + string 处理大数据
起因 (1)之前处理文本数据时,各种清洗数据用的都是java的File,FileReader/FileWriter,BufferedReader/BufferedWriter等类,详见java读写文件 (2)应用java的原因是java里面的map非常灵活,eclipse编译器更是给力,而且ctrl可以追踪函数等,详见java map的排序 (3)应用java的另一个原因是java里面的string类的字符串处理非常灵活,各种函数是应用尽有。 (4)上面两点算是自己的误解吧,因为c++里面也有也有与之对应
CSDN技术头条
2018/02/08
2.4K0
c++ fstream + string 处理大数据
如何将文件所有内容读取保存到 string
但现在我想做同样的事情,但不同的是,需要读到 std::string 中。我不想使用循环,也就是下面的代码,
ClearSeve
2022/02/10
2.1K0
c++文件操作4
二进制方式读取文件主要利用流对象调用成员函数read 函数原型:istream& read(char buffer, int len);* 参数解释:内存指针buffer指向内存中的一段存储空间,len是读写的字节数 读取二进制文件步骤: 1、包含头文件:#include< fstream > 2.创建流对象:ifstream ifs; 3.打开文件:ifs.open(“perosn.txt”,ios::in | ios::binary) 4.判断文件是否打开成功:ifs.is_open(); 5.读取文件:char buffer[64]; ifs.read(char buffer,int len); 6.打印输出:cout<<buffer<<endl; 7.关闭文件:ifs.close()
大忽悠爱学习
2021/02/22
3370
vs中没有vc_vs中的控件
头文件fstream包含了ifstream、ofstream、fstream三个类,可以通过定义这三个类的对象来实现相对应的文件操作。
全栈程序员站长
2022/09/30
8500
C++017-C++文件读写应用
在线练习: http://noi.openjudge.cn/ https://www.luogu.com.cn/
IT从业者张某某
2023/10/16
5900
C++017-C++文件读写应用
C++文件读写
在C++中,所有的输入输出操作大部分都继承自 ios_base 基类,详细的继承体系如下图所示
范中豪
2021/05/27
1.2K0
从零开始学C++之IO流类库(三):文件的读写、二进制文件的读写、文件随机读写
文章主要讲述了C++流和文件操作的相关内容。包括标准I/O流、自定义I/O流、文件操作、文件的随机读写以及文件指针的移动。
s1mba
2017/12/28
3.3K0
c++读写文件的几种方法_include有什么用
在看C++编程思想中,每个练习基本都是使用ofstream,ifstream,fstream,以前粗略知道其用法和含义,在看了几位大牛的博文后,进行整理和总结:
全栈程序员站长
2022/11/04
1.3K0
c++读写文件的几种方法_include有什么用
C++项目—开发简单图书管理系统
1.添加新图书模块:该模块可以实现将新图书信息录入到系统并将图书信息保存到文件中。
用户7886150
2021/02/14
1.3K0
【项目日记】仿mudou的高并发服务器 --- 实现HTTP服务器
上一篇文章我们基本实现了高并发服务器所需的基础模块,通过TcpServer类可以快速搭建一个TCP服务器。我们的最终目的是使用这个高并发服务器去实现一些业务,那么在网络通信中,我们就可以来实现一下HTTP服务。让浏览器可以访问获取数据。
叫我龙翔
2024/11/30
1010
【项目日记】仿mudou的高并发服务器 --- 实现HTTP服务器
C/C++ 读取文件16进制格式
比如我想要找到内存里 KiProcessExpiredTimerList+0x102 的位置:
王 瑞
2022/12/28
2.2K0
C/C++ 读取文件16进制格式
c++ 文件操作详解
C++ 通过以下几个类支持文件的输入输出: ofstream: 写操作(输出)的文件类 (由ostream引申而来) ifstream: 读操作(输入)的文件类(由istream引申而来) fstream: 可同时读写操作的文件类 (由iostream引申而来) 打开文件(Open a file) 对这些类的一个对象所做的第一个操作通常就是将它和一个真正的文件联系起来,也就是说打开一个文件。被打开的文件在程序中由一个流对象(stream object)来表示 (这些类的一个实例) ,而对这个流对象所做的任何
拾点阳光
2018/05/10
2K0
boost::string or boost::regex
当中用蓝色标记出的部分(layout, local_size_x, local_size_y, local_size_z, in)为keyword,斜体字部分(a, b, c)为数据类型为unsigned int的数字,请编写一个函数,用于从文件里抽取出a, b, c的值。当中文件名称为输入參数,该函数的返回值是抽取得到的a,b,c三个值。
全栈程序员站长
2022/07/08
2.2K0
C++中文件的读写
通过文件,可以将数据持久化。C++ 中对文件的操作需要包含头文件<fstream>。 文本文件,以文本的ASCII码的形式存储在计算机中。 二进制文件,以二进制的形式存储在计算机中,用户一般无法直接阅读。 操作文本的3个类:ofstream,写操作;ifstream,读操作;fstream,读写操作。
耕耘实录
2022/05/09
8650
C++ IO流_数据的旅行之路
程序中的数据总是在流动着,既然是流动就会有方向。数据从程序的外部流到程序内部,称为输入;数据从程序内部流到外部称为输出。
一枚大果壳
2022/09/16
8690
相关推荐
C++在线五子棋对战(网页版)项目:实用工具类模块代码实现
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验