基本上我需要做多個memcpy(),我不想dst ;在每次memcpy()呼叫后增加目標指標..只是想知道如何節省一些編碼時間。
memcpy(dest, src1, 1); // uint8_t
dest = 1;
memcpy(dest, src2, 2); // uint16_t
dest = 2;
memcpy(dest, src3, 1024); // uint8_t*
dest = 1024;
...
如何memcpy()為您增加目標指標的多個?
uj5u.com熱心網友回復:
你可以做一個函式:
void memcpy_auto_inc( char **pp_dest, void *src, size_t count )
{
memcpy( *pp_dest, src, count );
*pp_dest = count;
}
現在,假設它dest是 type char*,而不是寫
memcpy( dest, src1, 1 );
dest = 1;
memcpy( dest, src2, 2 );
dest = 2;
memcpy( dest, src3, 1024 );
dest = 1024;
你可以寫:
memcpy_auto_inc( &dest, src1, 1 );
memcpy_auto_inc( &dest, src2, 2 );
memcpy_auto_inc( &dest, src3, 1024 );
但是,我懷疑這是否值得付出努力,因為它使代碼變得不那么清晰并且不會為您節省太多輸入,即使您為函式選擇了比memcpy_auto_inc.
uj5u.com熱心網友回復:
撰寫自己的函式。
例如適用于任何尺寸的元素:
void *generic(void *dest, const void *src, const size_t elemsize, size_t nelems)
{
char *cptr = dest;
memcpy(dest, src, elemsize * nelems);
cptr = nelems * elemsize;
return cptr;
}
或如您的示例(字符大小元素)
void *charSizeOnly(void *dest, const void *src, size_t nelems)
{
char *cptr = dest;
memcpy(dest, src, nelems);
cptr = nelems;
return cptr;
}
用法示例:
mytype *dest;
mytype *src;
/* ... some code*/
/*it will copy and update the dest by 30 elements of type `mytype`*/
dest = generic(dest, src, sizeof(*dest), 30);
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/357611.html
上一篇:計算范圍內的值時的舍入誤差
下一篇:C中的陣列地址有問題嗎?
