2012-02-21 3 views
2

Я с помощью этой библиотеки: https://github.com/mysolution/hyphenator В JNI Я создаю эту функцию:Android NDK и __android_log_print

int main2() 
{ 
//load russian hyphenation patterns 
struct pattern_list_t* plist = create_pattern_list(); 
size_t i = 0; 
while (patterns[i]) 
{ 
struct pattern_t* p = create_pattern(patterns[i], isdigit_func, ismarker_func, char2digit_func); 
add_patern(plist, p); 
++i; 
} 
sort_pattern_list(plist); 

//hyphenate test words 
size_t word_index = 0; 
while (test_words[word_index]) 
{ 
struct word_hyphenation_t* wh = hyphenate_word(test_words[word_index], plist, marker); 
i = 0; 
while (test_words[word_index][i]) 
{ 
    __android_log_print(ANDROID_LOG_INFO, "HelloNDK!", "%c", test_words[word_index][i]); 
++i; 
} 

destroy_word_hyphenation(wh); 

++word_index; 
} 

//cleanup 
destroy_pattern_list(plist); 
return 0; 
} 

В Android NDK эта работа, но я получаю в LogCat:

02-21 16:15: 18.989: INFO/HelloNDK! (403):

Как решить эту проблему? Я думаю, что проблема в кодировании, но я не знаю, как это решить.

+0

Я могу подтвердить, что я пытаюсь выйти из ASCII-символов, но я могу выйти из myString.c_str(); в отдельном вызове __android_log_print, хотя, похоже, проблема связана с конкатенацией char *, id любят знать об этом. Будет ли сообщение, если я это выясню. – Dev2rights

+0

У вас похоже несоответствие типа, но без объявления 'test_words' я не могу сказать. Компилятор должен быть способен (gcc имеет специальную поддержку для типов формата printf); включите предупреждения. –

ответ

0

Каков ваш ожидаемый выход? Если персонаж выходит за пределы области ASCII, вам, конечно же, нужно будет что-то посмотреть в логарифме, который его поддерживает. Предполагая, что вы выводите UTF-8, Terminator хорош в Linux и Mintty (в сочетании с Cygwin/etc.) В Windows.

0

Я работал его, и это, кажется, очень неправильно для меня .....

Так полукокса * конкатенации в __android_log_vprint и __android_log_print может показаться, что вам нужно использовать побег% S не% с.

Это полностью scuppers мои планы по созданию кросс-платформенного char * log между iOS, Android и Blackberry как printf («% s», myString.c_str()); является незаконным. Должно получиться фанки с аргументами и разобрать строку. В любом случае это еще одна проблема, и есть ваше исправление ....

+0

'printf ("% s ", myString.c_str());' _legal_ и единственный правильный метод. «% s» ожидает 'const char *', и это то, что метод 'c_str()' (если это 'std :: string :: c_str()' или имеет соответствующую подпись) возвращается. Temporaries существуют до конца _statement_, настолько долго, что printf будет работать над ним. –

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