3

我有四个uint8_t数组:

uint8_t arrayOne[12]   = { 0x00,0x01,0x00,0x00,0x00,0x06,0xFE,0x03,0x01,0xC1,0x00,0x01 };

uint8_t arrayTwo[12]   = { 0x00,0x01,0x00,0x00,0x00,0x06,0xFE,0x03,0x4E,0x2D,0x00,0x0C };

uint8_t arrayThree[12] = { 0x00,0x01,0x00,0x00,0x00,0x06,0xFE,0x03,0x01,0xF3,0x00,0x01 };

uint8_t arrayFour[12]  = { 0x00,0x01,0x00,0x00,0x00,0x06,0xFE,0x03,0x20,0x04,0x00,0x01 };

我希望他们添加到另一个数组:

uint8_t theArray[4][12] = { arrayOne,arrayTwo,arrayThree,arrayFour };

但是当我将数组添加到 theArray 时,数组的值会发生变化。

为什么? 我怎样才能将它们正确添加到数组中?

4

3 回答 3

4

顶层数组应该只是一个指针数组:

uint8_t *theArrays[] = { arrayOne,arrayTwo,arrayThree,arrayFour };

您将丢失有关每个“行”长度的信息,但这很好。

我认为您不能像在您的示例中那样在初始化程序中引用数组并将元素自动复制到更大的数组中。

于 2015-06-03T09:55:30.430 回答
3

memcpy您必须使用header 中声明的标准函数复制结果数组中的每个数组<string.h>。例如

#include <string.h>
#include <stdint.h>

//...

uint8_t * arrayPtrs[] = { arrayOne, arrayTwo, arrayThree, arrayFour };

for ( size_t i = 0; i < sizeof( theArray ) / sizeof( *theArray ); i++ )
{
    memcpy( theArray[i], arrayPtrs[i], sizeof( theArray[i] ) );
}
于 2015-06-03T10:00:15.370 回答
1

您正在尝试使用指向 uint8_t 的指针初始化uint8_t 数组,而不是uint8_t元素。

试试这个:

uint8_t *theArrays[] = { array1,array2, ... };
于 2015-06-03T09:58:55.793 回答