memcpy()复制的字节数超出预期
我试图从数组中的某个偏移量开始,将“x”字节从一个数组memcpy到另一个数组memcpy()复制的字节数超出预期,c,C,我试图从数组中的某个偏移量开始,将“x”字节从一个数组memcpy到另一个数组 strlen(buf) // source array already contains 144 bytes // len - 500 bytes memcpy(&buf[start], &content[no_of_byes], len) 在执行strlen(buf)操作之后,我得到的总数是752,而不是644。我不明白原因 我甚至尝试将500字节从内容数组复制到另一个buffer2中,然后将其
strlen(buf) // source array already contains 144 bytes
// len - 500 bytes
memcpy(&buf[start], &content[no_of_byes], len)
在执行strlen(buf)操作之后,我得到的总数是752,而不是644。我不明白原因
我甚至尝试将500字节从内容数组复制到另一个buffer2中,然后将其复制到buffer2中,结果仍然相同 strlen试图计算字符串的长度,从某种意义上讲,它从缓冲区的开始一直计算字节数,直到遇到“\0”,而memcpy只处理字节数 我猜你的问题源于不理解这一点 您可能有一个752的字符串,并且正在尝试将其中的一些字节从偏移量复制到缓冲区的开头(这个信息在您的问题中不是很清楚)。但是,在此过程中,您的“\0”可能会保留在相同的位置,从而导致strlen给出相同的结果
我的建议是区分字符串和普通缓冲区,并对这两个操作使用适当的系统调用 请发一封信。memcpy出错的几率极低。您可能没有复制NUL终止符,这就引出了一个问题:为什么要对字符串使用
memcpy
?或者,为什么要对非字符串的对象调用strlen
?缓冲区的strlen()计算从buf开始到第一次命中null(\0)字符。在您的例子中,可能在752位置找到空字符。我猜这与memcpy()无关,与空字符位置有关,buf的长度为2000,起始偏移量为-144,没有是的偏移量-0需要查看更多代码。。例如,如果您没有包含正确的.h
,并且其中一个参数与原型不匹配,导致UB(无论如何都不太可能),或者如果src和dest颠倒,或者如果len实际上没有正确设置(因为它没有显示在您的代码中),并且是
。我强烈怀疑您正在寻找strcat()
而不是memcpy()