使用 10 月 2 日发布的 Symbian S60 第 5 版 SDK,我正在编译/运行(在 sim 上)以下代码片段:
void test(wchar_t *dest, int size, const wchar_t *fmt, ...) {
va_list vl;
va_start(vl, fmt);
vswprintf(dest, size, fmt, vl);
va_end(vl);
}
...
wchar_t str[1024];
// this crashes (2nd string 123 characters (+ \0) equals 248 bytes)
test(str, 1024, L"msg: %S", L"this is a test messagethis is a test messagethis is a test messagethis is a test messagethis is a test messagethis is a tes");
// this works (2nd string 122 characters (+ \0) equals 246 bytes)
test(str, 1024, L"msg: %S", L"this is a test messagethis is a test messagethis is a test messagethis is a test messagethis is a test messagethis is a te");
对我来说没有任何明显的原因(即使在阅读了vswprintf手册页一百次之后)我能否弄清楚为什么在 vswprintf 调用长字符串时这段代码会在我身上崩溃:-( 完全相同的代码在 Linux 机器上运行良好. 为 str 分配了足够的内存,加上 vswprintf 无论如何都在检查缓冲区溢出。不幸的是 ... S60 调试器在这次崩溃时没有中断,所以我没有详细信息:-(
有人有什么想法吗?
假设 Symbian 的 vswprintf 例程中存在错误,那么使用 POSIX 兼容代码可能的替代函数是什么?(这应该是一个跨平台的库)
谢谢。