strncpy,GCC给出-Werror=stringop截断

strncpy,GCC给出-Werror=stringop截断,c,strncpy,C,Strncpy,我正在逐块读取文件;我想把这些块连接在一起。为此,我执行strncpy将块的末尾复制到缓冲区中(TMP\u BUF\u SIZE是缓冲区的大小): 然后我计算tmpData中剩余的空间(NB\u READ是数据的大小): 最后,我执行另一个strncpy将下一个块的开头复制到缓冲区的末尾: strncpy(tmpData, &(data[nextToRead]), TMP_BUF_SIZE -1); strncpy(&(tmpData[nLast]), data, TMP_BU

我正在逐块读取文件;我想把这些块连接在一起。为此,我执行
strncpy
将块的末尾复制到缓冲区中(
TMP\u BUF\u SIZE
是缓冲区的大小):

然后我计算
tmpData
中剩余的空间(
NB\u READ
数据的大小):

最后,我执行另一个
strncpy
将下一个块的开头复制到缓冲区的末尾:

strncpy(tmpData, &(data[nextToRead]), TMP_BUF_SIZE -1);
strncpy(&(tmpData[nLast]), data, TMP_BUF_SIZE - nLast - 1);
编译时,GCC报告第二个strncpy的错误:

error: the output of « strncpy » could be truncated by copying between 0 and 127 bytes from a string of size 1023
但这正是我想做的。如何防止
GCC
报告此情况,而不删除
-Werror



PS:原始错误消息可能未完全翻译:
erreur: la sortie de « strncpy » peut être tronquée en copiant entre 0 et 127 octets depuis une chaîne de longueur 1023 [-Werror=stringop-truncation]


编辑:


正如@GuillaumePetitjean所提到的,有;它们通过关闭编译器警告来提供解决方案。我不想更改编译器的行为。我希望在代码中找到一个不会引发警告/错误的解决方案。

这是否回答了您的问题?为什么不使用strcat
?因为我没有考虑它^^^在您提供的链接中,他们建议使用
memcpy
,这可能是一种解决方法。我将使用
strncat
尝试
strncat
问题在于sameUse memcpy,并始终在字符串末尾设置零终止符,以确保正确执行。
erreur: la sortie de « strncpy » peut être tronquée en copiant entre 0 et 127 octets depuis une chaîne de longueur 1023 [-Werror=stringop-truncation]