调试断言失败 std::erase
Debug assertion failed with std::erase
我正在编写一个程序来解析日志文件,并决定尽可能使用 C++,但我遇到了这一行的调试断言 -
sLine.erase(remove_if(sLine.begin(), sLine.end(), isspace), sLine.end());
这似乎是因为在日志文件的第 2000 行有一个值为 -80 的字符。
所以,我尝试了这个
sLine.erase(remove_if(sLine.begin(), sLine.end(), [](char c) { return c >= -1 && c<=255; }), sLine.end());
但是这段代码卡住了,没有任何解释。
所以,最后我有三个问题-
- 为什么需要调试断言?
- 第二个代码片段失败的原因是什么?
- 您可以建议任何解决方法吗?
感谢您的帮助!
- 这是一个断言,用于测试字符参数是否超出范围。字符“°”(-80) 不是 ascii 字符,因此超出范围。
- 我不确定你的意思,此代码片段删除了所有 ascii 字符。
如果您只想删除 space 个字符,则以下代码将起作用
sLine.erase(std::remove_if(sLine.begin(), sLine.end(), [](char c) {
return (c == ' ');
}), sLine.end());
我正在编写一个程序来解析日志文件,并决定尽可能使用 C++,但我遇到了这一行的调试断言 -
sLine.erase(remove_if(sLine.begin(), sLine.end(), isspace), sLine.end());
这似乎是因为在日志文件的第 2000 行有一个值为 -80 的字符。
所以,我尝试了这个
sLine.erase(remove_if(sLine.begin(), sLine.end(), [](char c) { return c >= -1 && c<=255; }), sLine.end());
但是这段代码卡住了,没有任何解释。
所以,最后我有三个问题-
- 为什么需要调试断言?
- 第二个代码片段失败的原因是什么?
- 您可以建议任何解决方法吗?
感谢您的帮助!
- 这是一个断言,用于测试字符参数是否超出范围。字符“°”(-80) 不是 ascii 字符,因此超出范围。
- 我不确定你的意思,此代码片段删除了所有 ascii 字符。
如果您只想删除 space 个字符,则以下代码将起作用
sLine.erase(std::remove_if(sLine.begin(), sLine.end(), [](char c) { return (c == ' '); }), sLine.end());