gpt4 book ai didi

windows - 谁负责在处理 TB_GETBUTTONTEXT 时放置空终止符?

转载 作者:可可西里 更新时间:2023-11-01 12:09:04 25 4
gpt4 key购买 nike

TB_GETBUTTONTEXT 的文档表示处理程序必须返回字符数,并且可以选择(如果 lParam 不为空)将字符串复制到提供的缓冲区中。

需要注意的是长度不包括终止字符。我看到以下问题。假设处理程序存储预先计算的字符串(因此它的长度不会改变)。首先,调用者发送消息并将 lParam 设置为 null - 以查找字符数 - 处理程序返回字符数而不以 null 结尾。然后调用者分配内存并再次发送消息 - 这次将缓冲区地址作为 lParam 传递。

处理程序是否应该复制终止空值?我的意思是,如果处理程序第一次返回 N 并且调用者为 N 字符分配了空间并且处理程序附加了一个终止空值,那么就会发生缓冲区溢出。但是,如果调用者确实希望字符串以 null 终止并为 N+1 字符分配空间并且处理程序不附加 null 终止符,则处理程序将有一个不以 null 终止的字符串并且缓冲区溢出可能再次发生(如果调用者不够小心)。

那么handler应该怎么做呢?它是否应该复制空终止符?

最佳答案

MFC 在其 CMFCToolBar::OnGetButtonText() 实现中使用明智的方法,它假设调用者知道它应该分配 N+1 并使用 lstrcpy() 复制文本。

关于windows - 谁负责在处理 TB_GETBUTTONTEXT 时放置空终止符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3447228/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com