4

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
4

1 に答える 1