簡體   English   中英

如何在不知道數據類型的情況下寫入void指針?

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

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