我在将C ++ Builder项目升级到RAD Studio 2009时找到了这行代码:
mProcessLength->Text.printf("%d",mStreamLength);
它在2009年没有编译,但是这条线的意图是什么,什么是更好的等价物?鉴于mProcessLength->Text
现在是wchar_t*
。
答案 0 :(得分: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);
会将您的字符串文字更改为正确的类型。
答案 1 :(得分:1)
有可能将wchar作为UnicodeString VCL字符串类型处理。它有一个printf函数,除了指向string的指针外,它接受标准的printf参数。 UnicodeString本身填充了格式化的字符串。
因此,在堆栈上自动创建一个UnicodeString并调用printf方法,然后将指针填充回wchar。
答案 2 :(得分:0)
你可能想要wsprintf ...看起来像是一个带有名为printf的成员函数的类,它可能只是将其参数传递给wvsprintf。
答案 3 :(得分:0)
在旁注中,假设Text是属性,则在其上调用printf()将不会使用新值更新属性。 AnsiString和UnicodeString都有用于格式化数值的构造函数,因此可以在所有版本的C ++ Builder中使用以下代码:
mProcessLength->Text = mStreamLength;