с использованием Symbian S60 5th edition SDK, выпущенного 2 октября, я компилирую / запускаю (на 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? (предполагается, что это кроссплатформенная библиотека)
Спасибо.