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中复制字符串时截断的数据[重复]的主要内容,如果未能解决你的问题,请参考以下文章

strncpy的用法

字符串复制strncpy

C/C++C语言复制字符串及复制函数汇总(strcpy()/memcpy()/strncpy()/memmove())

C 标准库 - string.h之strncpy使用

strncat和strncpy编写安全的字符串复制函数是否有区别?

strcpy和memcpy的区别