TB_GETBUTTONTEXT的文檔說明處理程序必須返回字符數,並且可選地(如果lParam
不爲空)將字符串複製到提供的緩衝區中。誰負責在處理TB_GETBUTTONTEXT時放置空終止符?
需要注意的是,長度不包括終止字符。我看到以下問題。說處理程序存儲預先計算的字符串(所以它的長度不會改變)。首先,調用者發送消息lParam
設置爲空 - 以查找字符數 - 並且處理程序返回沒有終止空字符的數量。然後調用者分配內存並再次發送消息 - 這次傳遞緩衝區地址爲lParam
。
處理程序應該複製終止空嗎?我的意思是,如果第一次處理程序返回N
並且調用者爲N
字符分配了空間,並且處理程序追加了終止空值,則會發生緩衝區溢出。但是,如果調用者確實希望字符串被空終止併爲N+1
字符分配了空間,並且處理程序不會追加空終止符,則處理程序將有一個非空終止字符串,並且可能發生緩衝區溢出(如果調用者不夠小心)。
那麼處理程序應該怎麼做?它應該複製空終止符還是不?