2012-12-23 47 views
0

我學習,我想知道的最佳方式是如何做到以下幾點陣列複製,考慮以下代碼:將字節複製到字節數組?

void Cast1LineSpell(UINT Serial, char *chant) 
{ 
    byte packet[] = { 0x0F, 0x03, 
     (Serial >> 24) & 0xFF, (Serial >> 16) & 0xFF,(Serial >> 8) & 0xFF, Serial & 0xFF, 
     0x9A, 0x92, 0x00, 0x00, 0x00, 0x1A }; 

    byte prepareSpell[2] = { 0x4D, 0x01 }; 

    byte chant_length = sizeof(chant)/sizeof(chant[0]); 
    byte chant_name[] = { 0x4E, chant_length, }; // <= how can i put the bytes in chant* into the rest of this array, and then append bytes 0x00 and 0x4E on to the end of it? 
} 

我怎樣才能把那些的*chant裏面的字節,然後把它們到chant[]的末尾,然後在其末尾添加字節0x000x4E

任何人都可以提供解決方案嗎? 備受讚賞。

+0

應該如何運作的?你期望輸出什麼? –

+0

我想chant []輸出0x4D,0x01,chant_length,無論是在* chant,0x00,0x4E – Dean

+1

你最好使用像'std :: vector '這樣的容器,因爲它被標記了** C++ ** .. –

回答

0

您正在使用動態數組所以sizeof(chant)將始終是一個指針的大小,和sizeof(chant)/sizeof(chant[0])不會數組中元素的數目。這隻適用於靜態陣列

此外,您正在重新聲明chant這只是一個錯誤。

總之,由於您不知道chant中的元素數量,因此無法做到您想要做的事情。

+0

我不知道你的意思我認爲sizeof(array)/ sizeof(array [0])給了我elemenths的數量? – Dean

+1

@Dean:它應用於_static array_時,而不是在將它應用於指針時。指針的大小與數組的大小不一樣... –

+0

@Dean(而「靜態數組」我們的意思是「數組」。) – melpomene

0

根據我的理解,在C++中,傳遞給函數的所有數組無論是靜態分配還是動態分配,都將被視爲指針,或者甚至可以將參數寫爲char chant[](即只有第一個元素的地址通過)。

例子:

void f(int value[]){ 
    cout<<"size in f: "<<sizeof(value)/sizeof(int)<<endl; 
} 

int main(){ 
    int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8 }; 

    cout<<"size in main: "<<sizeof(arr)/sizeof(int)<<endl; 

    f(arr); 

    return 0; 
} 

結果是:

size in main: 8 
size in f: 1 

因此,大家可以看到,在f()value[]是一樣的value *,並sizeof(value)是指針的大小。

當你將一個數組傳遞給一個函數時,你應該(總是)傳遞這個長度。

void f(int value[], size_t size){ 
    cout<<"size in f: "<<size<<endl; 
} 

int main(){ 
    int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8 }; 

    size_t size = sizeof(arr)/sizeof(int); 

    cout<<"size in main: "<<size<<endl; 

    f(arr, size); 

    return 0; 
} 

輸出:

size in main: 8 
size in f: 8