You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于Win32 API中GetWindowTextA()函数空终止符的疑问

Win32 API GetWindowTextA() 空终止符疑问解答

我对Win32 API中的GetWindowTextA()函数存在理解困惑。根据微软官方文档,参数nMaxCount是要复制到缓冲区lpString的最大字符数,其中包含空终止符。想请教:GetWindowTextA()会自动向lpString缓冲区写入空终止符,还是需要手动添加?

微软文档中的GetWindowTextA()定义如下:

int GetWindowTextA(
  [in]  HWND  hWnd,
  [out] LPSTR lpString,
  [in]  int   nMaxCount
);

我的测试代码如下:

char M_Buff[20];

SetWindowTextA(M_SEND_EDIT_TEXT,"Hello World");

GetWindowTextA(M_SEND_EDIT_TEXT,M_Buff,20);  //是否需要手动给M_Buff添加空终止符?还是函数会自动添加?

printf("String is %s\n",M_Buff);

GetWindowTextA()会自动向lpString缓冲区写入空终止符,不需要手动添加。

函数的设计逻辑里,nMaxCount参数已经预留了空终止符的位置:它会把窗口文本的字符复制到缓冲区后,自动追加一个空字符,让返回内容成为标准的C风格字符串。

你的测试代码中,M_Buff大小为20,"Hello World"加上空终止符总共12个字符,远小于缓冲区容量,所以函数会正常在末尾写入空终止符,printf能正确输出完整字符串也验证了这一点。

需要注意:如果窗口文本长度加空终止符超过nMaxCount,函数会只复制nMaxCount-1个字符,再在最后添加空终止符,以此避免缓冲区溢出。

内容的提问来源于stack exchange,提问作者Alex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 23:45:44