C:unsigned char * bytes数组将元素复制到其他unsigned char *数组

时间:2016-09-28 09:57:13

标签: c arrays unsigned-char

我认为复制数组的元素如下:

unsigned char *new_bytes_array = malloc(sizeof(unsigned char)*length/2); 
for(int i=0, j=0; i<length; i++) {
  if(i % 2 == 0) continue; 
  new_bytes_array[j] = old_bytes_array[i]; 
  j++;

}

正在复制,但值不是通过引用,但我想确保这将是深拷贝,而不仅仅是引用或指针的浅拷贝。

我知道这可能是简单而荒谬的qustion,但我找不到类似堆栈而不是memcpy()所有数组,但我想只复制一些元素,例如每隔一个元素,或复制1-3元素并跳过第4个元素,(如果i%4 == 0跳过元素)。

2 个答案:

答案 0 :(得分:2)

new_bytes_array[j]评估为unsigned char

假设old_bytes_array[i]也这样做,那么

new_bytes_array[j] = old_bytes_array[i];

复制unsigned char而不是指针,而不是unsigned char*

答案 1 :(得分:0)

是的,您展示的作业会分配一个unsigned char,即&#34;一个字节&#34;在大多数典型的计算机上,它不会复制指针而是原始数据。

这是一个完整的功能,可以完成您想要的任务,并修复一些小问题:

void * copy_every_second_byte(const void *src, size_t length)
{
  if(src == NULL || length == 0)
    return NULL;
  unsigned char *out = malloc(length / 2);
  for(size_t i = 0, j = 0; i < length; ++i)
  {
    if(i % 2 == 0) continue;
    out[j++] = ((unsigned char *) src)[i];
  }
  return out;
}