2013-07-12 3 views
0

UTF-8 파일을 ustring으로 구문 분석하고 싶습니다.이 파일을 str에서 읽습니다. 오류가 있습니다 : 'Glib :: ConvertError'의 인스턴스를 throw 한 후 종료됩니다. 어떻게해야합니까?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 converterror에는 "무엇이 잘못 되었습니까"에 대한 몇 가지 추가 정보가 들어 있는데, 이는 실제 원인이 무엇인지 판단하는 데 도움이 될 수 있습니다. 오류. –

답변

1

이것은 매우 잘못된 같습니다 sizeof(str.c_str())

char* cs = (char*) malloc(sizeof(str.c_str())); 

당신에게 같은 일부 소수를 줄 수밖에 없다 str.c_str()의 결과로, 당신의 컴퓨터에있는 포인터의 크기 중 4 또는 8 (.

cs = const_cast<char*> (str.c_str()); 
01 : 물론

, 정말 다음 줄부터, 당신은 단지 잘못 할당 된 메모리가 누수되어, 중요하지 않습니다

나는 const_cast<char *>이 필요하다는 것을 확신하지 못했습니다 (string 내부의 문자열을 수정하면 정의되지 않은 동작이므로이 작업을 수행하는 것은 확실하지 않습니다).