Printf以不熟悉的方式使用

时间:2010-03-05 05:43:09

标签: c++ c++builder c++builder-2009

我在将C ++ Builder项目升级到RAD Studio 2009时找到了这行代码:

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

它在2009年没有编译,但是这条线的意图是什么,什么是更好的等价物?鉴于mProcessLength->Text现在是wchar_t*

4 个答案:

答案 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

因此,在堆栈上自动创建一个UnicodeString并调用printf方法,然后将指针填充回wchar。

答案 2 :(得分:0)

你可能想要wsprintf ...看起来像是一个带有名为printf的成员函数的类,它可能只是将其参数传递给wvsprintf。

答案 3 :(得分:0)

在旁注中,假设Text是属性,则在其上调用printf()将不会使用新值更新属性。 AnsiString和UnicodeString都有用于格式化数值的构造函数,因此可以在所有版本的C ++ Builder中使用以下代码:

mProcessLength->Text = mStreamLength;