Visual c++ C++中如何将cStand转换为TCHAR? 如何在C++中转换cSt+tCHAR *?< /p> < p>从CString转换为tCHAR *只需使用GETBuffic函数。< /P>

Visual c++ C++中如何将cStand转换为TCHAR? 如何在C++中转换cSt+tCHAR *?< /p> < p>从CString转换为tCHAR *只需使用GETBuffic函数。< /P>,visual-c++,Visual C++,请注意,这允许您将cstring与Win32 API函数一起使用,这些函数返回字符串作为输出参数,如下所示 CString str; GetStr(str.GetBuffer(1024), 1024); str.ReleaseBuffer(); 假设GetStr函数具有以下原型 void GetStr(TCHAR *str, size_t s); 您可以使用CString作为第一个参数调用GetStr,如下所示 CString str; GetStr(str.GetBuffer(1024),

请注意,这允许您将cstring与Win32 API函数一起使用,这些函数返回字符串作为输出参数,如下所示

CString str;
GetStr(str.GetBuffer(1024), 1024);
str.ReleaseBuffer();
假设GetStr函数具有以下原型

void GetStr(TCHAR *str, size_t s);
您可以使用CString作为第一个参数调用GetStr,如下所示

CString str;
GetStr(str.GetBuffer(1024), 1024);
str.ReleaseBuffer();
对GetBuffer的调用实际上会分配足够的内存来存储1024个字符


请注意,调用ReleaseBuffer非常重要。否则会出现内存泄漏。

转换为TCHAR*通常是不安全的。确实不想转换为const TCHAR*吗?在GetBuffer之后调用ReleaseBuffer是必需的,但不是因为您声明的原因。不会有内存泄漏。但是,CString对象可能处于不一致的状态,并且结果可能没有很好地定义。函数ReleaseBuffer不做其名称所暗示的事情;它不会释放任何缓冲区,而是修复CString对象的内部状态,如字符串长度等。@IInspectable没错,但根据MSDN,如果使用GetBuffer返回的指针更改字符串内容,则只需调用ReleaseBuffer。一般来说,我宁愿完全远离这种不确定性。