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[]然后附加字节0x00,然后再放到它的0x4E末尾?

任何人都可以提供解决方案吗?非常感激。

4

2 回答 2

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

如您所见, in与 相同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
于 2012-12-23T03:51:57.357 回答
0

您正在使用动态数组,因此sizeof(chant)始终是指针的大小,而sizeof(chant) / sizeof(chant[0])不是数组中元素的数量。这只适用于静态数组

此外,您正在重新声明chant这只是一个错误。

总之,由于您不知道 中的元素数量chant,因此无法做您想做的事情。

于 2012-12-23T00:45:06.983 回答