(至少在這個Q的緣故)唱的Borland C++ Builder的2009年定製的sprintf(...),只有變量輸入
在自定義類,它是相當於一個String類我有一個功能,像這樣:
(編輯的位用於此Q)
MyString &MyString::Sprintf(const wchar_t *Text, ...)
{
wchar_t ResultStr[1000] ;
va_list List ;
va_start (List, Text) ;
int cnt = vswprintf (ResultStr, Text, List) ;
#ifdef _DEBUG
if (cnt >= (int)sizeof(ResultStr)) {throw (sizeof(ResultStr)) ;}
#endif
va_end (List) ;
my_internally_handled_string.assign(ResultStr) ;
return *this;
}
我然而想調整此函數(或再拍一張),其只在該變量作爲輸入,並且使用類'作爲的輸入Text
的內部管理的字符串功能。
事情是這樣的:
MyString &MyString::Sprintf(...)
{
const wchar_t *Text = my_internally_handled_string.c_str() ;
// ... Rest see above
然而,這並不工作。 vswprintf
引發異常。 (在my_internally_handled_string中使用完美的OK文本進行測試)
我想知道它是否完全可能和/或我需要做什麼才能使它按照我設想的方式工作?的va_start()
'{throw(sizeof(ResultStr))'??你也應該比較字符的數量,而不是'sizeof'。 –
這將有助於用您的實際代碼替換「請參閱上文」。我無法猜測你用什麼替換了'va_start(List,Text)'。 –
請確保您不嘗試覆蓋您的格式字符串存儲在同一內存中,而您仍然在閱讀格式字符串...對於您需要將內部字符串複製到單獨的緩衝區開始覆蓋它。 –