Ошибка Ustring (во время печати)

Я хочу разобрать файл 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;

1 ответ

Это выглядит очень неправильно:

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 является неопределенным поведением).

Другие вопросы по тегам