在 MFC 中使用 strncpy() 复制字符串时截断的数据



为了修复缓冲区溢出覆盖率问题,我使用了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 此函数负责所有限制。

相关内容

  • 没有找到相关文章

最新更新