我想將一個陣列復制到位置索引處的第二個陣列中。
我所做的是:
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]);
}
它是空的。我想在資料[3]“測驗”中找到
uj5u.com熱心網友回復:
你需要從你寫信的同一個地方閱讀。
你要這個:
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]);
}
uj5u.com熱心網友回復:
您從索引 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] = 0xhhx (%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而不是intor uint32_t。
uj5u.com熱心網友回復:
這就是我要做的,以便您可以在所需的索引處復制名稱。這是有效的,因為您要復制的字串的長度是 4,而 sizeof(uint32_t) 是 4。否則,您將需要輸入要復制的位元組的長度。
memcpy((uint8_t*)&_data[index], &name, sizeof(uint32_t));
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/331432.html
上一篇:查找陣列中每個數字的第一次出現
