printf的在不熟悉的方式使用
-
24-09-2019 - |
题
我发现这行代码升级C ++ Builder项目到RAD工作室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。
在一个方面说明,假定文本是一个属性,则调用它的printf()不会upate用新值的属性。既AnsiString类型和的UnicodeString有用于格式化数字值的构造,所以下面可以代替同样可以使用,在C ++生成器的所有版本:
mProcessLength->Text = mStreamLength;
不隶属于 StackOverflow