将数组复制到数组索引c中



我想复制一个数组到第二个数组的位置索引

我所做的是:

uint8_t* _data = (uint8_t *)malloc(8U*1024);
uint32_t index= 4U;
uint8_t name[] ="TEST";
memcpy(&data[index], name, sizeof(uint32_t));
index+= 4U;

当我使用

打印数据时
for (int j =0; j<index; j++)
{
printf("%c n",data[j]);
}

为空。我想找到at data[3] "TEST">

你需要从你写的地方读取。

你想要这个:

uint8_t* data = malloc(8U * 1024);    // remove the (uint8_t*) cast, it's useless
// but it doesn't do any harm
uint32_t index = 4U;
uint8_t name[] = "TEST";
memcpy(&data[index], name, sizeof(name));     // use sizeof(name)
//  index += 4U;                                << delete this line
for (int j = index; j < index + sizeof(name); j++)  // start at j = index 
{                                                   // and use sizeof(name)
printf("%c n", data[j]);
}

您从索引4复制了数据,但从索引0打印。那你想怎么打印呢?

可视化这个问题:

int main() 
{
uint8_t* data = malloc(8 * 1024); 

size_t index = 4;
uint8_t name[] = "TEST";
memcpy(&data[index], name, sizeof(name));     
for (size_t j = 0; j < index + sizeof(name); j++) 
{                                                  
printf("data[%zu] = 0x%02hhx (%c)n", j, data[j], isalpha(data[j]) ? data[j] : ' ');
}
}

和输出:

data[0] = 0x00 ( )
data[1] = 0x00 ( )
data[2] = 0x00 ( )
data[3] = 0x00 ( )
data[4] = 0x54 (T)
data[5] = 0x45 (E)
data[6] = 0x53 (S)
data[7] = 0x54 (T)
data[8] = 0x00 ( )

我希望它能帮助你理解这个问题。

对于索引使用正确的类型size_t而不是intuint32_t

这就是我要做的,这样您就可以在所需的索引处复制名称。这个工作是因为你正在复制的字符串的长度是4,sizeof(uint32_t)是4。否则,您需要输入要复制的字节长度。

memcpy((uint8_t*)&_data[index], &name, sizeof(uint32_t));

最新更新