C++读取文本配置文件后删除换行符操作失效问题求助
问题原因
你遇到的异常输出和std::string的erase方法无关,核心问题是配置文件使用了Windows风格的行尾符\r\n(回车+换行),你只删除了\n,保留了\r(回车符)。\r在终端输出时的作用是将光标移动到当前行的开头,后续打印的内容会直接覆盖当前行已有的内容,就会出现你看到的后半段内容覆盖前半段的异常输出。
解决方法
修改删除换行的逻辑,同时移除所有\r和\n即可,推荐使用更高效的erase-remove惯用法实现:
// 移除所有换行符和回车符 text.erase(std::remove_if(text.begin(), text.end(), [](unsigned char c) { return c == '\n' || c == '\r'; }), text.end());
额外代码优化建议
你当前代码里的异常捕获逻辑是无效的:std::ifstream默认不会抛出异常,你需要在打开文件前先设置异常掩码才能触发catch块,也可以直接判断文件是否打开成功更简单:
std::ifstream file_stream(str); if (!file_stream.is_open()) { std::cerr << "配置文件打开失败:" << str << std::endl; return config; } // 后续读文件逻辑
内容的提问来源于stack exchange,提问作者Jaime M. Serrano González
相关产品推荐
相关产品推荐

