2016-09-28 87 views
1

我認爲複製這樣數組的元素:C:無符號字符*字節數組複製元素到其他無符號字符*陣列

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,但我找不到類似於stack而memcpy()的所有數組,但我只想複製一些元素,例如每個第二個元素,或者複製1-3個元素和跳過第4個元素,(如果i%4 == 0跳過元素)。

+1

您的代碼,使「深層複製」原樣。 –

+1

請注意'sizeof(unsigned char)'總是1,所以這只是一個令人討厭的寫'1'的方法(在乘法的情況下是非常沒有意義的)。考慮刪除它。 – unwind

+0

@unwind實際上在不同的平臺上,'sizeof(unsigned char)'並不總是1.所以我認爲把它移除並不是一個好主意。 – litao3rd

回答

2

new_bytes_array[j]評估爲unsigned char

假設old_bytes_array[i]確實爲好,那麼這

new_bytes_array[j] = old_bytes_array[i]; 

副本的unsigned char而不是一個指針,而不是一個unsigned char*

0

是的,您所顯示的任務分配了一個單獨的unsigned char,即大多數典型計算機上的「一個字節」,它不會複製指針,而是複製原始數據。

下面是一個完整的功能,你想要什麼,並修復了一些小問題:

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; 
}