簡體   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