Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
memcpy()复制的字节数超出预期_C - Fatal编程技术网

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中,然后将其

我试图从数组中的某个偏移量开始,将“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中,然后将其复制到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()