Что такое mbstate_t и зачем его сбрасывать?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Что такое mbstate_t и зачем его сбрасывать?

Сообщение Anonymous »

Не могли бы вы объяснить мне, что такое mbstate_t? Я прочитал описание cppreference, но до сих пор не понимаю его предназначения. Я понимаю, что mbstate_t — это некоторая статическая структура, видимая для ограниченного набора функций, таких как mbtowc(), wctomb() и т. д., но я все еще не понимаю, как ее использовать. это. В примерах cppreference я вижу, что эту структуру следует сбросить перед вызовом некоторых функций. Предположим, я хочу посчитать символы в многоязычной строке, например:

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

std::string str = "Hello! Привет!";
Очевидно, что str.size() нельзя использовать в этом примере, поскольку он просто возвращает количество байтов в строке. Но что-то вроде этого делает свою работу:

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

std::locale::global(std::locale("")); // Linux, UTF-8
std::string str = "Hello! Привет!";
std::string::size_type stringSize = str.size();
std::string::size_type nCharacters = 0;
std::string::size_type nextByte = 0;
std::string::size_type nBytesRead = 0;
std::mbtowc(nullptr, 0, 0); // What does it do, and why is it needed?
while (
(nBytesRead = std::mbtowc(nullptr, &str[nextByte], stringSize - nextByte))
!= 0)
{
++nCharacters;
nextByte += nBytesRead;
}
std::cout 

Подробнее здесь: [url]https://stackoverflow.com/questions/70432999/what-is-mbstate-t-and-why-to-reset-it[/url]
Ответить

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

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

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

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

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