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

发布于 2024-12-17 20:00:57 字数 476 浏览 3 评论 0原文

我正在使用此代码来格式化 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

凹づ凸ル 2024-12-24 20:00:57

您的格式说明符使用大写的 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() 方法,例如:

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

Your format specifier is using uppercase S, which tells Unicode flavors of ...printf() functions (such as the one used inside of WideString:::sprintf()) to expect a char* instead of a wchar_t* (and Ansi flavors of ...printf() functions to expect a wchar_t* instead of a char*). That is why s.sprintf(L"%-11S","blablabla") works - you are passing it a char*.

For what you are attempting, you need to use lowercase s instead. You also need to use the WideString::c_bstr() method when passing a WideString value to a ...printf() function, eg:

s.sprintf(L"%-11s", DM->tDepPlnFltNo->AsWideString.c_bstr());
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文