[英]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.