strncpy()用于在MFC中复制字符串时截断的数据[重复]
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了strncpy()用于在MFC中复制字符串时截断的数据[重复]相关的知识,希望对你有一定的参考价值。
这个问题在这里已有答案:
为了修复缓冲区溢出Coverity问题,我使用了strncpy()来复制列表项。列表项需要从一行拖放到另一行。因此需要复制的字符串包含' n',' 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);
}
Coverity扫描已通过,但某些列中的数据被截断。我听说过使用strcpy_s方法但是不可用。任何人都可以帮我解决问题吗?
答案
您的代码错误,并没有达到您的预期。 lvItem.pszText
是一个指针,它具有4个固定大小,分别为8个字节,具体取决于您的项目类型。所以你的sizeof运算符会导致截断。
以这种方式使用LVITEM
,需要一个由您定义的缓冲区!
如果您使用GetIemText
,您也可以使用CListCtrl::SetItemText此功能可以处理所有限制。
以上是关于strncpy()用于在MFC中复制字符串时截断的数据[重复]的主要内容,如果未能解决你的问题,请参考以下文章
C/C++C语言复制字符串及复制函数汇总(strcpy()/memcpy()/strncpy()/memmove())