C: unsigned char * bytes 数组将元素复制到其他 unsigned char * 数组
C: unsigned char * bytes array copying elements to other unsigned char * array
我认为像这样复制数组元素:
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++;
}
正在复制但不是通过引用赋值,但我想确保这将是深复制,而不仅仅是引用或指针的浅复制。
我知道这可能是一个简单而荒谬的问题,但我在堆栈上找不到类似的东西而不是 memcpy() 所有数组,但我只想复制一些元素,例如每隔一个元素,或复制 1-3 个元素并跳过第 4 个元素,(如果 i%4 == 0 跳过元素)。
new_bytes_array[j]
的计算结果为 unsigned char
。
假设old_bytes_array[i]
也是如此,那么这个
new_bytes_array[j] = old_bytes_array[i];
复制 unsigned char
而不是指针,而不是 unsigned char*
。
是的,您显示的分配分配了单个 unsigned char
,即在大多数典型计算机上 "a byte",它不复制指针而是原始数据。
这是一个完整的函数,可以满足您的需求,并修复了一些小问题:
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;
}
我认为像这样复制数组元素:
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++;
}
正在复制但不是通过引用赋值,但我想确保这将是深复制,而不仅仅是引用或指针的浅复制。
我知道这可能是一个简单而荒谬的问题,但我在堆栈上找不到类似的东西而不是 memcpy() 所有数组,但我只想复制一些元素,例如每隔一个元素,或复制 1-3 个元素并跳过第 4 个元素,(如果 i%4 == 0 跳过元素)。
new_bytes_array[j]
的计算结果为 unsigned char
。
假设old_bytes_array[i]
也是如此,那么这个
new_bytes_array[j] = old_bytes_array[i];
复制 unsigned char
而不是指针,而不是 unsigned char*
。
是的,您显示的分配分配了单个 unsigned char
,即在大多数典型计算机上 "a byte",它不复制指针而是原始数据。
这是一个完整的函数,可以满足您的需求,并修复了一些小问题:
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;
}