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