0

给定

CString buffer = "";
Cstring value = "blah";

buffer.Format ("%s %s", value, value.GetBuffer());

是通过CString等效的两种方式,还是通过在CString幕后发生的事情导致它等效?

4

1 回答 1

1

没有一个是正确的。巧合的是,第一个似乎有效,而后者使用了用于不同目的的工具。唯一正确的方法是调用强制转换运算符:

buffer.Format("%s", static_cast<LPCTSTR>(value));

直接传递CString对象只是巧合,因为对象开头的指针大小的值被解释为指向字符数组的指针。类的第一个类成员CString恰好是m_pszData成员——一个存储受控字符序列的指针。

GetBufferCString仅当您必须直接操作 s 内容时才应使用。请注意,这将返回一个非const指针。这通常在与 C API 交互时使用(有关详细信息,请参阅直接修改 CString 内容)。

于 2013-09-09T20:17:53.143 回答