我使用此代码格式化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");
时它可以工作但是当我设置为mysql字段类型的WideString时它不是!!
我认为问题在于转换!
如何纠正???
答案 0 :(得分:2)
您的格式说明符使用大写S
,它告诉...printf()
函数的Unicode风格(例如WideString:::sprintf()
内部使用的函数)期望char*
而不是wchar_t*
一个...printf()
(和wchar_t*
的Ansi风格函数可以预期char*
而不是s.sprintf(L"%-11S","blablabla")
。这就是char*
有效的原因 - 您传递的是s
。
对于您尝试的内容,您需要使用小写WideString::c_bstr()
。将WideString
值传递给...printf()
函数时,您还需要使用s.sprintf(L"%-11s", DM->tDepPlnFltNo->AsWideString.c_bstr());
方法,例如:
{{1}}