我發現這行代碼升級2009年C++ Builder項目到RAD Studio時使用:printf的在不熟悉的方式
mProcessLength->Text.printf("%d",mStreamLength);
它不會在2009年編譯,但是這是什麼行,什麼的意圖是一個更好的等價物?鑑於mProcessLength->Text
現在是wchar_t*
。
我發現這行代碼升級2009年C++ Builder項目到RAD Studio時使用:printf的在不熟悉的方式
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);
會改變你的字符串字面量爲正確的類型。
您可能想要wsprintf ...看起來像最初是一些帶有成員函數printf的類,它可能只是將其參數傳遞給wvsprintf。
很可能wchar是作爲UnicodeString VCL字符串類型處理的。它有一個printf函數,除了指向字符串的指針之外,它還接受標準的printf參數。 UnicodeString本身被格式化的字符串填充。
所以一個的UnicodeString是在堆棧上自動創建和printf的方法被調用時,指針再釀回WCHAR。
在附註上,假定Text是一個屬性,那麼調用printf()將不會使用新值更新屬性。既AnsiString類型和的UnicodeString有用於格式化數字值的構造,所以下面可以用來代替,在同樣C++生成器的所有版本:
mProcessLength->Text = mStreamLength;
'的printf(「%d」,mStreamLength)'將被打印出mStreamLength作爲整數 –
@John:不,它是printf某些類的成員函數(我們只被告知它是C++ Builder的一部分),而不是printf C庫函數。所以它可以做任何事情,並可能格式化爲一個字符串,而不是實際上「打印」任何東西。使用wchar_t *作爲海報要求的標準函數是wsprintf。 –