将数组复制到数组索引 C
Copy array into array index 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]);
}
它是空的。
我想在 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
而不是 int
或 uint32_t
.
这就是我要执行的操作,以便您可以将名称复制到所需的索引处。这个之所以有效,是因为您要复制的字符串的长度是 4,而 sizeof(uint32_t) 是 4。否则您将需要输入要复制的字节的长度。
memcpy((uint8_t*)&_data[index], &name, sizeof(uint32_t));
我想将一个数组复制到索引位置的第二个数组中。
我做的是:
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]);
}
它是空的。 我想在 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
而不是 int
或 uint32_t
.
这就是我要执行的操作,以便您可以将名称复制到所需的索引处。这个之所以有效,是因为您要复制的字符串的长度是 4,而 sizeof(uint32_t) 是 4。否则您将需要输入要复制的字节的长度。
memcpy((uint8_t*)&_data[index], &name, sizeof(uint32_t));