Я хочу разобрать файл UTF-8 в ustring, я читаю этот файл в str.
Есть ошибка:
прекращение вызывается после создания экземпляра Glib :: ConvertError.
Что я должен делать?
char* cs = (char*) malloc(sizeof(char) * str.length());
strcpy(cs, str.c_str());
ustring res;
while (strlen(cs) > 0) {
gunichar ch = g_utf8_get_char(cs);
res.push_back(ch);
cs = g_utf8_next_char(cs);
}
wofstream wout("output");
cout << res << endl;
Это выглядит очень неправильно:
char* cs = (char*) malloc(sizeof(str.c_str()));
как sizeof(str.c_str())
обязательно даст вам небольшое число, например 4 или 8 (в зависимости от того, какой размер указателя на вашей машине, в результате str.c_str()
,
Конечно, это НЕ ДЕЙСТВИТЕЛЬНО имеет значение, так как со следующей строки вы теряете память, которую вы только что распределили неправильно:
cs = const_cast<char*> (str.c_str());
Я далеко не убежден, что вам нужно const_cast<char *>
(это, конечно, НЕПРАВИЛЬНО, поскольку изменение строки внутри string
является неопределенным поведением).
Других решений пока нет …