我遇到了一些問題。C中使用void的通用可編輯函數*
我需要寫像memcpy(void*, const void*)
一些功能,它的簽名應該是:
void arrayCopy(void *dest, int dIndex, const void *src, int sIndex, int len)
我注意到,在很多實施memcpy
,我們投無效*爲char *,但我認爲這是不在我的情況下,arrayCopy
函數需要用於多種類型的數組,包括structs
。
那麼,我該如何做到這一點?
編輯: 的源代碼可能是類似的東西:
#include <stdio.h>
#include <string.h>
void arrayCopy(void *, int, const void *, int, int, size_t);
int main(void)
{
int i;
int dest[10] = {1};
int src [] = {2, 3, 4, 5, 6};
arrayCopy(dest, 1, src, 0, 5, sizeof(int));
for (i=0; i<10; i++) printf("%i\n", dest[i]);
return 0;
}
void arrayCopy(void *dest, int dIndex, const void *src, int sIndex, int len, size_t size)
{
char *cdest = (char*) dest;
const char *csrc = (char*) src;
int i;
len *= size;
if (dest == src)
{
printf("Same array\n");
}else
{
cdest += (dIndex * size);
csrc += (sIndex * size);
for (i=0; i<len; i++)
*cdest++ = *csrc++;
}
}
感謝。
char *與int *具有相同大小的ptr,但* int_var需要4個字節,而* char_var需要1個字節(在4個字節的系統上) – 2010-09-16 19:02:18
正確的代碼如上所示。謝謝 – 2010-09-16 19:22:07