给定
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
成员 - 存储受控字符序列的指针。
仅当必须直接操作CString
的内容时,才应使用GetBuffer
。请注意,这将返回一个非const
指针。这通常在与 C API 接口时使用(有关详细信息,请参阅直接修改 CString 内容)。