2010-03-05 32 views
1

我發現這行代碼升級2009年C++ Builder項目到RAD Studio時使用:printf的在不熟悉的方式

mProcessLength->Text.printf("%d",mStreamLength); 

它不會在2009年編譯,但是這是什麼行,什麼的意圖是一個更好的等價物?鑑於mProcessLength->Text現在是wchar_t*

回答

3

我懷疑你收到這些錯誤:

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); 

會改變你的字符串字面量爲正確的類型。

0

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

+0

'的printf(「%d」,mStreamLength)'將被打印出mStreamLength作爲整數 –

+0

@John:不,它是printf某些類的成員函數(我們只被告知它是C++ Builder的一部分),而不是printf C庫函數。所以它可以做任何事情,並可能格式化爲一個字符串,而不是實際上「打印」任何東西。使用wchar_t *作爲海報要求的標準函數是wsprintf。 –

1

很可能wchar是作爲UnicodeString VCL字符串類型處理的。它有一個printf函數,除了指向字符串的指針之外,它還接受標準的printf參數。 UnicodeString本身被格式化的字符串填充。

UnicodeString printf

所以一個的UnicodeString是在堆棧上自動創建和printf的方法被調用時,指針再釀回WCHAR。

0

在附註上,假定Text是一個屬性,那麼調用printf()將不會使用新值更新屬性。既AnsiString類型和的UnicodeString有用於格式化數字值的構造,所以下面可以用來代替,在同樣C++生成器的所有版本:

mProcessLength->Text = mStreamLength;