1

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

怎么纠正???

4

1 回答 1

2

您的格式说明符使用大写字母S,它告诉 Unicode 风格的...printf()函数(例如在 内部使用的函数WideString:::sprintf())期望 achar*而不是 a wchar_t*(而 Ansi 风格的...printf()函数期望 awchar_t*而不是 a char*)。这就是为什么s.sprintf(L"%-11S","blablabla")有效 - 你正在传递一个char*.

对于您正在尝试的内容,您需要改用小写字母s。在将值传递给函数时,您还需要使用该WideString::c_bstr()方法,例如:WideString...printf()

s.sprintf(L"%-11s", DM->tDepPlnFltNo->AsWideString.c_bstr());
于 2011-11-23T22:16:08.393 回答