[英]Printf used in unfamiliar fashion
將C ++ Builder項目升級到RAD Studio 2009時,我發現了這行代碼:
mProcessLength->Text.printf("%d",mStreamLength);
它不會在2009年編譯,但是這條線的意圖是什么,什么是更好的等價物呢? 鑒於mProcessLength->Text
現在是wchar_t*
。
我懷疑你收到這些錯誤:
E2034 Cannot convert 'const char *' to 'const wchar_t *'
E2342 Type mismatch in parameter 'format' (wanted 'const wchar_t *', got 'const char *')
這是您傳遞給printf的參數不匹配。 將其更改為:
mProcessLength->Text.printf(L"%d",mStreamLength);
將您的字符串文字更改為正確的類型。
有可能將wchar作為UnicodeString VCL字符串類型處理。 它有一個printf函數,除了指向string的指針外,它接受標准的printf參數。 UnicodeString本身填充了格式化的字符串。
因此,在堆棧上自動創建UnicodeString並調用printf方法,然后將指針填充回wchar。
你可能想要wsprintf ...看起來像是一個帶有名為printf的成員函數的類,它可能只是將其參數傳遞給wvsprintf。
在旁注中,假設Text是屬性,則在其上調用printf()將不會使用新值更新屬性。 AnsiString和UnicodeString都有用於格式化數值的構造函數,因此可以在所有版本的C ++ Builder中使用以下代碼:
mProcessLength->Text = mStreamLength;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.