C アプリケーションで ISO 8859-1 (ラテン拡張 ASCII 文字セット) を使用しています。strcpy
紐の部分を合わせるとstrcat
うまくいきます。しかし、sprintf("%s %s")
一部のランタイム (特に Android の特定のバージョン) で , を使用すると、拡張 ASCII 文字 (具体的é
には、他は試していませんが) がヒットすると、文字列が切り捨てられます。
%s
ヒットするまでバイトをコピーするだけだと思っていまし'\0'
た。strcpy
/は、書式strcat
設定なしでそれを行うため、機能すると思います。ここで何が起こっている可能性がありますか?
printf()
を使用してテキストを表示しているのではなく、ISO-8859-1 を適切に処理する独自のテキスト レンダリング エンジンを使用していることに注意してください。
更新: 明確にするために、文字列を C に保持し、それを OpenGL ベースのテキスト レンダリング エンジンに渡す NDK アプリがあります。完全な文字列を char* リテラルとして渡すと、正常に表示されます。部分を一緒に sprintf() すると、é 文字で切り捨てられます。例えば:
char buffer[1024];
strcpy(buffer, "This is ");
strcat(buffer, "the string I want to diésplay.");
それはうまく表示されます。でもこれは:
sprintf(buffer, "%s%s", "This is ", "the string I want to diésplay.");
次のように印刷します。
This is the string I want to di