Как записать в пустой указатель, не зная тип данных? - PullRequest
0 голосов
/ 13 ноября 2018

Я пытаюсь написать код для универсального стека, используя Singlely Linked List на 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, но даже для этого требуется тип данных.

Пожалуйста, помогите.

1 Ответ

0 голосов
/ 13 ноября 2018

Если вы хотите сохранить только указатель на данные, вы можете просто скопировать указатель:

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 * как для источника, так и для пункта назначения.

...