【发布时间】:2016-02-12 03:14:52
【问题描述】:
以下对sprintf 的调用在为 i386 架构编译时失败。使用安卓 NDK。我试过用 GCC 和 clang 编译,结果是一样的。我正在使用android-ndk-r10e(APP_STL 设置为gnustl_shared GCC,c++_shared 和clang)。在为具有相同配置的 ARM 进行编译时,以及在使用 GCC 5.2 为 i386 Linux 进行编译时,它的工作原理与 (I?) 一样。
int n = sprintf(buf, "\xc0%s", "test"); // n == 0, strlen(buf) == 0
调用后,buf 为空,而不是包含预期的字符序列“\xc0test”。 sprintf 似乎忽略了第一个非 ASCII 字符之后的所有内容。以下代码将“test”写入buf,省略了最后一个字节:
sprintf(buf, "%s\xc0", "test"); // strlen(buf) == 4
另一方面,这很好用:
sprintf(buf, "%s", "test\xc0"); // strlen(buf) == 5
我很困惑。
【问题讨论】:
标签: c++ gcc android-ndk printf clang