正在复制C中的无符号字符



我想使用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错误?

主要建议:学会使用调试器。它提供了有关错误指令的有用信息


为了回答您对上面问题中显示的代码片段的查询,

  1. 在取消引用传入指针(tofrom)之前,请对照NULL检查它们
  2. 检查所用索引的边界限制。目前,它们可以溢出分配的内存

正确使用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_。

相关内容

  • 没有找到相关文章

最新更新