传递 CString 和将 CString.GetBuffer 传递给 CString.Format 中的 %s 之间有

is there any difference between passing a CString and passing CString.GetBuffer to a %s in a CString.Format

本文关键字:CString 中的 Format 之间 和将 GetBuffer 传递      更新时间:2023-10-16

给定

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 内容)。