给定
CString buffer = "";
Cstring value = "blah";
buffer.Format ("%s %s", value, value.GetBuffer());
是通过CString
等效的两种方式,还是通过在CString
幕后发生的事情导致它等效?
没有一个是正确的。巧合的是,第一个似乎有效,而后者使用了用于不同目的的工具。唯一正确的方法是调用强制转换运算符:
buffer.Format("%s", static_cast<LPCTSTR>(value));
直接传递CString
对象只是巧合,因为对象开头的指针大小的值被解释为指向字符数组的指针。类的第一个类成员CString
恰好是m_pszData
成员——一个存储受控字符序列的指针。
GetBuffer
CString
仅当您必须直接操作 s 内容时才应使用。请注意,这将返回一个非const
指针。这通常在与 C API 交互时使用(有关详细信息,请参阅直接修改 CString 内容)。