2013-07-12 3 views
0

Я хочу разобрать файл UTF-8 в ustring, я прочитал этот файл на странице. Ошибка: завершение вызова после вызова экземпляра 'Glib :: ConvertError'. Что мне делать?Ошибка Ustring (во время печати)

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; 
+0

В соответствии с этой страницей https://developer.gnome.org/glibmm/2.34/classGlib_1_1ConvertError.html конвертер содержит дополнительную информацию о том, «что не так», что может быть полезно при определении того, что является ФАКТИЧЕСКОЙ причиной ошибка. –

ответ

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

Смежные вопросы