Ошибка длины при попытке создать std :: wstring, чтобы сохранить результат std :: mbsrtowcsC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Ошибка длины при попытке создать std :: wstring, чтобы сохранить результат std :: mbsrtowcs

Сообщение Anonymous »

Я пытаюсь измерить, сколько времени требуется для чтения текстового файла (std :: ifstream), используя разные подходы и создать std :: wstring из его содержимого. Для создания std :: wstring я создал два метода, один для преобразования персонажа по характеру в цикле (

Код: Выделить всё

std::mbrtowc
), а другой, чтобы преобразовать весь контент за один раз (

Код: Выделить всё

std::mbsrtowcs
).
Текстовый файл, который я читаю, состоит из 3369045 байтов и, как ожидается, будет иметь 3324222 (широкие) символы.
Преобразование символа, кажется, работает нормально, но преобразование всех в одном ходе приводит к следующей ошибке:

terminate called after throwing an instance of 'std::length_error'
what(): basic_string::_M_create
Aborted (core dumped)

Я понимаю, что он брошен при создании большого std :: wstring . Можно ли это исправить? Если да, как? Кроме того, если я делаю что -то не так, пожалуйста, дайте мне знать. < /P>
код: < /p>

Код: Выделить всё

#include 
#include 
#include 
#include 
#include 
#include 
#include 

static std::istream::pos_type get_file_size(std::istream& in)
{
in.seekg(0, std::ios::end);
auto pos = in.tellg();
in.seekg(0, std::ios::beg);
return pos;
}

std::wstring get_file_contents(const char* buffer, std::size_t size)
{
std::mbstate_t state{};
wchar_t current_wide_char;
std::size_t remaining = size;
std::size_t offset = 0;
std::wstring output{};

while (remaining > 0)
{
std::size_t len = std::mbrtowc(&current_wide_char, buffer + offset, remaining, &state);
if (len == 0)
{
offset++;
remaining--;
}
else if (len >= 1 && len 

Подробнее здесь: [url]https://stackoverflow.com/questions/79502834/length-error-when-trying-to-create-a-stdwstring-to-store-result-of-stdmbsrto[/url]
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Ошибка длины при попытке создать std :: wstring, чтобы сохранить результат std :: mbsrtowcs
    Anonymous » » в форуме C++
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous
  • Непонятное поведение std::next_permutation с std::wstring
    Anonymous » » в форуме C++
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous
  • Попытка сделать пользовательский формат как Std :: String, так и Std :: Wstring
    Anonymous » » в форуме C++
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous
  • Попытка сделать пользовательский формат как std :: string, так и std :: wstring [закрыто]
    Anonymous » » в форуме C++
    0 Ответы
    20 Просмотры
    Последнее сообщение Anonymous
  • Как std :: print a std :: wstring?
    Anonymous » » в форуме C++
    0 Ответы
    2 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C++»