前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >引起what(): basic_string::_M_replace_aux问题的一个原因以及解决方法

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

作者头像
用户10923276
发布2024-11-04 08:10:30
发布2024-11-04 08:10:30
11200
代码可运行
举报
运行总次数: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
复制
 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
复制
 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 删除。

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档