gpt4 book ai didi

c++ - 如何将 CString 传递给格式字符串 %s?

转载 作者:IT老高 更新时间:2023-10-28 21:42:23 27 4
gpt4 key购买 nike

class MyString
{
public:
MyString(const std::wstring& s2)
{
s = s2;
}

operator LPCWSTR() const
{
return s.c_str();
}
private:
std::wstring s;
};

int _tmain(int argc, _TCHAR* argv[])
{
MyString s = L"MyString";
CStringW cstring = L"CString";
wprintf(L"%s\n", (LPCWSTR)cstring); // Okay. Becase it has an operator LPCWSTR()
wprintf(L"%s\n", cstring); // Okay, fine. But how?
wprintf(L"%s\n", (LPCWSTR)s); // Okay. fine.
wprintf(L"%s\n", s); // Doesn't work. Why? It prints gabage string like "?."
return 0;
}

如何将 CString 传递给格式字符串 %s?

顺便说一句,MSDN says (这很奇怪)

To use a CString object in a variable argument function
Explicitly cast the CString to an LPCTSTR string, as shown here:

CString kindOfFruit = "bananas";
int howmany = 25;
printf( "You have %d %s\n", howmany, (LPCTSTR)kindOfFruit );

最佳答案

CString 是专门设计的,它只包含一个指向缓冲区类中字符串数据的指针。当按值传递给 printf 时,当看到格式字符串中的“%s”时,它将被视为指针。

它最初只是碰巧与 printf 一起工作,但后来被保留为类接口(interface)的一部分。


这篇文章是基于早已退休的 MS 文档,所以我无法链接到他们 promise 他们将继续完成这项工作。

但是,在添加更多反对意见之前,还请阅读分享我旧知识的人的这篇博文:

Big Brother helps you

关于c++ - 如何将 CString 传递给格式字符串 %s?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6608942/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com