如何使用 sprintf 或 wprintf 正确格式化 WideString
我正在使用此代码来格式化 WideString 但没有成功!它打印出意外的结果:(
代码,
WideString s;
dep=new TStringList();
while(!DM->tDepPln->Eof)
{
//where tDepPlnFltNo is mysql field type of WideString
s.sprintf(L"%-11S",DM->tDepPlnFltNo->AsWideString);
dep->Add(s);
DM->tDepPln->Next();
}
这是我使用 s.sprintf(L"%-11S","blablabla"); 时的 它可以工作,但是当我设置为 WideString 的 mysql 字段类型时,它就不行了!! 我认为问题出在转换上!
怎么改正啊???
I am using this code to format WideString but with no success! It prints unexpecting results :(
here is my code
WideString s;
dep=new TStringList();
while(!DM->tDepPln->Eof)
{
//where tDepPlnFltNo is mysql field type of WideString
s.sprintf(L"%-11S",DM->tDepPlnFltNo->AsWideString);
dep->Add(s);
DM->tDepPln->Next();
}
when I use s.sprintf(L"%-11S","blablabla");
it works but when i set to mysql field type of WideString it's not!!
I think the problem is with conversion!
How to correct it ???
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您的格式说明符使用大写的
S
,它告诉...printf()
函数的 Unicode 风格(例如WideString:::sprintf 内部使用的函数) ()
)期望使用char*
而不是wchar_t*
(以及 Ansi 风格的...printf()
函数期待wchar_t*
而不是char*
)。这就是s.sprintf(L"%-11S","blablabla")
起作用的原因 - 您正在向它传递一个char*
。对于您正在尝试的内容,您需要使用小写
s
代替。将WideString
值传递给...printf()
函数时,您还需要使用WideString::c_bstr()
方法,例如:Your format specifier is using uppercase
S
, which tells Unicode flavors of...printf()
functions (such as the one used inside ofWideString:::sprintf()
) to expect achar*
instead of awchar_t*
(and Ansi flavors of...printf()
functions to expect awchar_t*
instead of achar*
). That is whys.sprintf(L"%-11S","blablabla")
works - you are passing it achar*
.For what you are attempting, you need to use lowercase
s
instead. You also need to use theWideString::c_bstr()
method when passing aWideString
value to a...printf()
function, eg: