为了修复缓冲区溢出覆盖率问题,我使用了strncpy((来复制列表项。列表项需要从一行拖放到另一行。因此,需要复制的字符串包含""、"\t"和"字符。
我使用了下面的代码。
for (int nColumn = 1; nColumn < nColumns; nColumn++)
{
strncpy(lvItem.pszText, (LPCTSTR)(GetItemText(nDragIndex, nColumn)), sizeof(lvItem.pszText)-1);
lvItem.pszText[sizeof(lvItem.pszText)] = ' ';
lvItem.iSubItem = nColumn;
SetItem(&lvItem);
}
覆盖性扫描通过,但某些列中的数据被截断。我听说过使用strcpy_s方法,但没有使用。谁能帮我解决问题?
你的代码是错误的,没有达到你的预期。lvItem.pszText
是一个指针,它的固定大小为 4 个相应的 8 个字节,具体取决于项目的类型。因此,您的 sizeof 运算符会导致截断。
以这种方式使用LVITEM
,需要一个由您定义的缓冲区!
如果使用GetIemText
,还可以使用 CListCtrl::SetItemText 此函数负责所有限制。