我今天写C++代码运行时显示
terminate called after throwing an instance of 'std::range_error'
what(): wstring_convert::from_bytes
然后查了一下说:
这个错误通常是由于字符串转换时超出范围引起的。 可能是在处理字符串转换时出现了问题。
代码(有AI部分,并不是OJ题目,纯属自己整些东西):
void pigggg()
{
HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
CONSOLE_SCREEN_BUFFER_INFO csbi;
GetConsoleScreenBufferInfo(hConsole, &csbi);
int consoleHeight = csbi.srWindow.Bottom - csbi.srWindow.Top + 1;
gotoxy2(hConsole, 0, consoleHeight - 1);
std::ifstream file(filePath1);
std::string things;
std::getline(file, things);
file.close();
std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>, wchar_t> converter;
std::wstring escaped_str = converter.from_bytes(things);
std::wstring raw_text;
std::wregex pattern(L"\\\\u([0-9a-fA-F]{4})");
std::wsregex_iterator iter(escaped_str.begin(), escaped_str.end(), pattern);
std::wsregex_iterator end;
size_t pos = 0;
while (iter != end) {
std::wsmatch match = *iter;
size_t start = match.position();
size_t len = match.length();
int code = std::stoi(match.str(1), nullptr, 16);
raw_text += escaped_str.substr(pos, start - pos);
raw_text += static_cast<wchar_t>(code);
pos = start + len;
++iter;
}
raw_text += escaped_str.substr(pos);
std::wstring_convert<std::codecvt_utf8<wchar_t>, wchar_t> utf_converter;
narrow_str = converter.to_bytes(raw_text);
}