求助,悬关
  • 板块灌水区
  • 楼主lzh009
  • 当前回复5
  • 已保存回复5
  • 发布时间2024/5/17 17:32
  • 上次更新2024/5/17 20:32:51
查看原帖
求助,悬关
952814
lzh009楼主2024/5/17 17:32

我今天写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);
}
2024/5/17 17:32
加载中...