[英]Assignment from void pointer to another void pointer
我想將位從一個void *復制到另一個void *。
我該怎么做?
我嘗試了這個:
static void* copyBlock(void* ptr) {
if (!ptr) {
return NULL;
}
int sizeOfBlock=*(int*)ptr+13;
void* copy = malloc(sizeOfBlock);
if (!copy) {
return NULL;
}
for(int i=0;i<sizeOfBlock;i++){
*(copy+i)=*(ptr+i);
}
return copy;
}
但我得到: invalid use of void expression
您不能取消引用,執行指針算術,為空指針編制索引,因為它沒有基類型或對象大小。 因此,您必須將void指針強制轉換為要復制的數據單元類型的指針,以便編譯器知道要復制的數據大小。
話雖如此,您最好使用:
memcpy( copy, prt, sizeOfBlock ) ;
這種設計(在沒有任何結構的情況下在一個塊內存儲塊大小)對我來說似乎很危險,但我仍然知道答案。
*(copy+i)=*(ptr+i);
在這里,您會收到錯誤消息,因為您無法取消引用空指針。 您需要將其強制轉換為指向某個對象的指針。 像這樣:
((char *)copy)[i] = ((char *)ptr)[i];
您應該使用memcpy
函數:
memcpy(copy, ptr, sizeOfBlock);
根據編譯器設置(您可能是作為C ++而不是C進行編譯),可能需要將指針轉換為char指針:
memcpy((char *) copy, (const char *) ptr, sizeOfBlock);
注意:函數的參數應為const char *ptr
,以確保您不會錯誤地更改ptr
的內容。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.