簡體   English   中英

Printf以不熟悉的方式使用

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

因此,在堆棧上自動創建UnicodeString並調用printf方法,然后將指針填充回wchar。

你可能想要wsprintf ...看起來像是一個帶有名為printf的成員函數的類,它可能只是將其參數傳遞給wvsprintf。

在旁注中,假設Text是屬性,則在其上調用printf()將不會使用新值更新屬性。 AnsiString和UnicodeString都有用於格式化數值的構造函數,因此可以在所有版本的C ++ Builder中使用以下代碼:

mProcessLength->Text = mStreamLength; 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM