我在我的 C 应用程序中使用 ISO 8859-1(拉丁扩展 ASCII 字符集)。当我strcpy
/strcat
字符串的部分在一起时,它工作正常。但是,当我sprintf("%s %s")
在某些运行时(尤其是某些 Android 版本)上使用 , 时,当扩展的 ASCII 字符(特别是é
,虽然我没有尝试过其他字符)被击中时,字符串将被截断。
我以为%s
只是应该复制字节直到'\0'
被击中。我怀疑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.");
这显示得很好。但是这个:
sprintf(buffer, "%s%s", "This is ", "the string I want to diésplay.");
打印为:
This is the string I want to di