c++ - TabCtrl_InsertItem : do we need to keep memory of the text alive?

标签 c++ windows winapi

对于 TabCtrl_InsertItem , 我们需要保留 pszText member 指向有效内存还是操作系统会复制文本以便我们可以立即清除文本?

TCITEM tcItem = { TCIF_TEXT };
CString strText;
for (int i=0; i<3; i++) {
    strText.Format(_T("Tab %d"), i+1);
    tcItem.pszText = strText;          // option 1
    tcItem.pszText = _tcsdup(strText); // option 2
    TabCtrl_InsertItem(i, &tcItem);
}

我们如何才能知道对于这个函数和 future 的其他函数哪个是正确的? 我在 MSDN 中找不到它。

最佳答案

操作系统会将字符串复制到内部数据结构中。您不需要维护支持字符数组。您可以在函数调用完成后立即释放它。

通常,任何接收字符串的 Windows API 函数都是这种情况。没错,MSDN 文档中没有明确说明,但大多数 Windows 开发人员已经知道这一点。当这为真时,MSDN 明确指出。我想不出一个例子 - 如果它曾经发生过,那也是非常罕见的。

关于c++ - TabCtrl_InsertItem : do we need to keep memory of the text alive?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23755733/

相关文章:

android - Eclipse 说我的 SDK 工具已经过时了

windows - 如何仅回显 "on"或 "off"文本?

c# - 全屏显示窗口

C++ 标准化网络 TS1 和文件系统 TS

c++ - 如何使用 < 和 > 命令在 C++ 中获取输入和输出?

c++ - 这段代码是如何工作的,反转字符串的真正简短方法,它有效,但我不知道如何

windows - 使用批处理文件中的参数运行命令

security - 如果从 Windows 8 RTM 中设置的提升进程和非默认浏览器运行,ShellExecute 会失败

c++ - Windows 10 相机框架服务器,使用网络摄像头识别实际应用程序

c++ - 为什么不调用移动构造函数?