1

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

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

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

4

4 回答 4

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

会将您的字符串文字更改为正确的类型。

于 2010-03-05T17:39:11.723 回答
1

wchar 很有可能作为 UnicodeString VCL 字符串类型处理。它有一个 printf 函数,除了指向字符串的指针外,它接受标准的 printf 参数。UnicodeString 本身填充了格式化的字符串。

UnicodeString printf

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

于 2010-03-05T05:50:58.287 回答
0

您可能想要 wsprintf... 看起来最初是某个具有名为 printf 的成员函数的类,它可能只是将其参数传递给 wvsprintf。

于 2010-03-05T05:48:42.210 回答
0

附带说明一下,假设 Text 是一个属性,然后在其上调用 printf() 不会使用新值更新该属性。AnsiString 和 UnicodeString 都有用于格式化数值的构造函数,因此在所有版本的 C++Builder 中都可以使用以下构造函数:

mProcessLength->Text = mStreamLength; 
于 2010-06-10T23:13:53.060 回答