我在C應用程序中使用ISO 8859-1(拉丁擴展ASCII字符集)。當我將strcpy
/strcat
的部分串在一起時,它工作正常。但是當我使用sprintf("%s %s")
時,在某些運行時(特別是某些版本的Android)上,當擴展的ASCII字符(特別是é
,雖然我沒有嘗試其他字符)被擊中時,字符串將會截斷。sprintf()在某些運行時處理%s擴展ASCII(ISO 8859-1)?
我以爲%s
只是應該複製字節,直到被擊中。我懷疑strcpy
/strcat
的作品,因爲它沒有任何格式化。這裏可能會發生什麼?
我應該注意到,我沒有使用printf()
查看文本,而是我自己的文本渲染引擎,它可以很好地處理ISO-8859-1。
更新: 爲了說明問題,我有一個NDK應用程序,它將字符串保存爲C,並將其傳遞給基於OpenGL的文本呈現引擎。如果我將整個字符串作爲char *文字傳遞,它會顯示正常。如果我將sprintf()部分拼接在一起,它會在é字符處截斷。 例如:
char buffer[1024];
strcpy(buffer, "This is ");
strcat(buffer, "the string I want to diésplay.");
顯示正常。但這:
This is the string I want to di
你確定這是sprintf()的錯嗎? strlen()說什麼? –
我不知道,因爲我沒有特定的Android設備(衆所周知的三星模型)的用戶遇到此錯誤。在我自己的測試設備上,它工作正常,並且它在iOS和Win32上也能正常工作。所以我想知道如果sprintf()在一些Android運行時將char *視爲UTF-8或其他東西。 – user1054922
讓我澄清一下:你有NDK應用程序,它將字符串傳遞給Java應用程序? –