没有缓冲区大小的vswprintf()在小缓冲区而不是EOF上崩溃。如何传递缓冲区大小

时间:2016-01-28 00:22:03

标签: c++ c++builder c++builder-2009

使用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()失败,这似乎是内部实施。我原本期望将EOF作为返回值。

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

练习的重点是实现一个后退场景,当缓冲区在一两个怪异的情况下太小时,这样我就可以为函数分配更多内存并再试一次。但这种机制似乎根本不起作用。

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

1 个答案:

答案 0 :(得分:2)

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