如何使用sprintf或wprintf正确格式化WideString

时间:2011-11-23 19:56:51

标签: printf widestring c++builder-2010

我使用此代码格式化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时它不是!! 我认为问题在于转换!

如何纠正???

1 个答案:

答案 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}}