[英]How to write to a void pointer without knowing the Data Type?
我試圖使用C中的單鏈接列表為通用堆棧編寫代碼。我試圖在每個函數中使用(void *)
作為數據類型,例如:
node* getNode(void *, size_t);
void append(node **, size_t);
等等
每個節點的結構為:
typedef struct linked_list{
void *data;
struct linked_list *next; }node;
在上面提到的getNode
函數中,我正在嘗試執行以下操作:
node* getNode(void *data, size_t data_size) {
node *newNode;
newNode = (node *)malloc(sizeof(node));
newNode->next = NULL;
// this line should assign the void *data to the data part of the node
return newNode;}
我無法在不知道數據類型的情況下找到如何分配數據部分,而只能使用data_size
變量。 我發現了有關memcopy
函數的信息,但是即使那樣也需要數據類型。
請幫忙。
如果只想保存指向數據的指針,則可以復制該指針:
newNode->data = data;
如果要復制其指向的內容,則需要使用malloc
獲取內存,並需要使用memcpy
復制字節:
newNode->data = malloc(data_size);
memcpy(newNode->data, data, data_size);
memcpy
的簽名是:
void *memcpy(void *dest, const void *src, size_t n);
它旨在復制通用內存,因此您可以為源和目標傳遞一個void *
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.