1

使用 Borland C++ Builder 2009

我根据 RAD Studio 的帮助 (F1) 使用 vswprintf:

int vswprintf(wchar_t *buffer, const wchar_t *format, va_list arglist); 

到目前为止,我总是提供一个很大的缓冲区wchar_t OutputStr[1000]并且从未遇到任何问题。作为一个测试并想做一个改进动作,我尝试了一个小缓冲区wchar_t OutputStr[12],并注意到程序完全崩溃了。甚至try{}catch(...){}没有抓住它。Codeguard 报告memcpy()失败,这似乎是内部实现。我原本期望一个EOFas 作为返回值。

在线搜索时,vswprintf我发现 c++ 变体将缓冲区大小作为输入,但我似乎无法说服我的编译器使用该变体?知道如何使用 BCB2009 强制它吗?

练习的全部目的是实现一个回退方案,当缓冲区在可能的一两个异常情况下太小时,这样我就可以为函数分配更多内存并重试。但这种机制似乎根本不起作用。

不确定如何最好地测试所需的字节/字符的确切数量?

4

1 回答 1

2

您可以使用vswprintf_s。失败时返回负值

于 2016-01-28T00:42:09.840 回答