使用10月2日发布的Symbian S60第五版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兼容代​​码可以替代哪些功能? (这应该是一个跨平台的库)

谢谢。

最佳答案

对我来说,这似乎是进入vswprintf()调用的工作。即使您只能进行程序集级调试,也应通过监视str[]内存中的内容来弄清到底发生了什么。

07-27 13:33