2012-02-21 69 views
2

我使用這個lib目錄下: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 2012-05-21 08:29:14

+0

你似乎有一個類型不匹配,但沒有聲明'test_words'我不知道。編譯器應該可以(gcc對printf格式類型有特殊的支持);打開警告。 – 2013-01-04 15:29:43

回答

0

您的預期產出是多少?如果角色超出ASCII的範圍,那麼當然需要查看支持它的logcat。假設你輸出的是UTF-8,在Linux上Terminator是不錯的,在Windows上是Mintty(與Cygwin/etc結合)。

0

我的工作了,這似乎非常錯誤的我.....

所以對於__android_log_vprint的char *級聯和__android_log_print它會出現,你需要使用轉義%不是%C。

這完全淹沒了我在iOS,Android和Blackberry之間作爲printf(「%s」,myString.c_str())進行跨平臺char *日誌的計劃。是非法的。將不得不與時髦和解析字符串。無論如何,這是另一個問題,並有你的修復....

+0

'printf(「%s」,myString.c_str());'是_legal_並且是唯一正確的方法。 「%s」需要'const char *',這就是'c_str()'方法(如果它是'std :: string :: c_str()'或者具有匹配的簽名)返回。臨時存在直到_statement_結束,這足以讓printf工作。 – 2013-01-04 15:26:31