【问题标题】:Defining buffer size correct "Stack around the variable String was corrupted"正确定义缓冲区大小“变量字符串周围的堆栈已损坏”
【发布时间】:2011-02-05 18:21:53
【问题描述】:

我的代码中有这两行:

TCHAR String[400] = {0};
SendMessageW(hwnd, WM_GETTEXT,sizeof(String), (LPARAM)String);

当我以这种方式使用它时,有时会出现运行时错误:“围绕变量字符串的堆栈已损坏”

当我使用时

TCHAR String[400] = {0};
SendMessageW(hwnd, WM_GETTEXT,10, (LPARAM)String);

它可以正常工作。但我认为使用 sizeof() 的全部目的是确保没有溢出问题......为什么 sizeof(String) 不安全,我可以用什么代替??

谢谢!祝你有美好的一天!

【问题讨论】:

  • 为什么不用GetWindowText函数呢?你到底为什么要使用 Windows 9x 兼容方案?您真的计划为链接到 MFC DLL 的应用程序支持 Windows 95 吗?

标签: c++


【解决方案1】:

您正在使用 wchar_t,sizeof(String) 将是 800,而不是 400。修复:

wchar_t String[400] = 0;
SendMessageW(hwnd, WM_GETTEXT, sizeof(String) / sizeof(wchar_t), (LPARAM)String);

【讨论】:

  • @Eugen Constantin Dinca:我不知道它是否更好,我猜两者都可以工作...... _countof 输入更短;-)
  • IMO 最佳解决方案(缺少std::vector<wchar_t>)是const int StringSize = 400; wchar_t String[StringSize] = 0; SendMessageW(hwnd, WM_GETTEXT, StringSize, (LPARAM)String);
猜你喜欢
  • 2011-06-06
  • 1970-01-01
  • 2018-03-12
  • 1970-01-01
  • 1970-01-01
  • 2021-03-28
  • 2012-11-08
  • 2019-09-04
相关资源
最近更新 更多