关于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
相关产品推荐
相关产品推荐

