簡體   English   中英

從void指針分配到另一個void指針

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM