【问题标题】:how to correctly format WideString using sprintf or wprintf如何使用 sprintf 或 wprintf 正确格式化 WideString
【发布时间】:2011-11-23 19:56:51
【问题描述】:

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

如何改正???

【问题讨论】:

    标签: printf widestring c++builder-2010


    【解决方案1】:

    您的格式说明符使用大写的S,它告诉Unicode 风格的...printf() 函数(例如WideString:::sprintf() 内部使用的函数)期待char* 而不是wchar_t*(和Ansi 风格...printf() 函数期望 wchar_t* 而不是 char*)。这就是 s.sprintf(L"%-11S","blablabla") 起作用的原因 - 你传递给它的是 char*

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

    s.sprintf(L"%-11s", DM->tDepPlnFltNo->AsWideString.c_bstr());
    

    【讨论】:

    • 你是对的雷米!我以前使用小写的s,我经常在AnsiString中使用它。而且我知道我使用了 upper S,因为我在以下站点中看到了带有 upper S 的 printf() func。 java2s.com/Tutorial/C/0300__Wide-Character-String/… Thought WideString sprintf 也使用了这个,但没有。
    • 感谢雷米的帮助!它可以工作WideString(fieldAsWS).c_bstr();
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-25
    • 2016-06-03
    • 1970-01-01
    • 2021-04-24
    • 2011-06-29
    • 2020-06-14
    相关资源
    最近更新 更多