繁体   English   中英

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

[英]vswprintf() without buffer size crashes on small buffer instead of EOF. How to pass buffer size

使用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强制它吗?

练习的全部目的是实现一个后备方案,以防止在一个或两个怪胎情况下缓冲区太小,以便我可以为该函数分配更多的内存,然后重试。 但是这种机制似乎根本不起作用。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM