我想使用memcpy,但它似乎是从一开始就复制数组?
我想从A[a]
复制到A[b]
。因此,我找到了另一种方法,
void copy_file(char* from, int offset, int bytes, char* to) {
int i;
int j = 0;
for (i = offset; i <= (offset+bytes); i++) to[i] = from[j++];
}
我有seg错误,但我不知道我从哪里得到这个seg错误?每个条目包含8个字节,所以我的第二次尝试是
void copy_file(char* from, int offset, int bytes, char* to) {
int i;
int j = 0;
for (i = 8*offset; i <= 8*(offset+bytes); i++) to[i] = from[j++];
}
但仍然存在seg故障。如果您需要更多信息,请随时询问!
我有seg错误,但我不知道我从哪里得到这个seg错误?
主要建议:学会使用调试器。它提供了有关错误指令的有用信息
为了回答您对上面问题中显示的代码片段的查询,
- 在取消引用传入指针(
to
和from
)之前,请对照NULL
检查它们 - 检查所用索引的边界限制。目前,它们可以溢出分配的内存
正确使用memcpy()
:
根据手册页,memcpy()
的签名表示
void*memcpy(void*dest,const void*src,size_t n);
它将CCD_ 8字节从CCD_。
此外,需要注意的一点非常重要:
内存区域不得重叠
所以,要把A[A]复制到A[b],你可以写一些类似的东西
memcpy(destbuf, &A[a], (b-a) );
在我看来,
memcpy
从开始复制数组
不,没有。事实上,memcpy
根本不知道它正在从数组复制或向数组复制。它将其参数视为指向非结构化内存块的指针。
如果要从A[a]
复制到A[b]
,请将地址A[a]
以及A[b]
和A[a]
之间的字节数传递到memcpy
,如下所示:
memcpy(Dest, &A[a], (b-a) * sizeof(A[0]));
这将把A
的内容从索引a
(包括CCD_20)复制到索引b
(不包括CCD_21),复制到由Dest
指向的存储器块中。如果您也希望对Dest
应用偏移,请使用&Dest[d]
作为第一个参数。对于char
以外的类型(有符号或无符号)的数组,需要乘以sizeof
。
更改的最后一行
for (i = offset; i <= (offset+bytes); i++)
to[i] = from[j++];
至
for (i = offset; i <= bytes; i++,j++)
to[j] = from[i];
这对我来说很好。我认为offset
是数组的开始,byte
是数组的结束。即将CCD_ 29拷贝到CCD_。