How to write to a void pointer without knowing the Data Type?












-1















I am trying to write the code for a generic Stack using Singly Linked List in C. I am trying to use (void *) as the data type in each of its functions like:



node* getNode(void *, size_t);



void append(node **, size_t); etc.



The structure for each node is:



typedef struct linked_list{
void *data;
struct linked_list *next; }node;


In the getNode function mentioned above I am trying to do this:



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;}


I could not find how to assign the data part without knowing the data type, but only using the data_size variable. I found out about the memcopy function, but even that requires the data type.



Please help.










share|improve this question



























    -1















    I am trying to write the code for a generic Stack using Singly Linked List in C. I am trying to use (void *) as the data type in each of its functions like:



    node* getNode(void *, size_t);



    void append(node **, size_t); etc.



    The structure for each node is:



    typedef struct linked_list{
    void *data;
    struct linked_list *next; }node;


    In the getNode function mentioned above I am trying to do this:



    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;}


    I could not find how to assign the data part without knowing the data type, but only using the data_size variable. I found out about the memcopy function, but even that requires the data type.



    Please help.










    share|improve this question

























      -1












      -1








      -1








      I am trying to write the code for a generic Stack using Singly Linked List in C. I am trying to use (void *) as the data type in each of its functions like:



      node* getNode(void *, size_t);



      void append(node **, size_t); etc.



      The structure for each node is:



      typedef struct linked_list{
      void *data;
      struct linked_list *next; }node;


      In the getNode function mentioned above I am trying to do this:



      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;}


      I could not find how to assign the data part without knowing the data type, but only using the data_size variable. I found out about the memcopy function, but even that requires the data type.



      Please help.










      share|improve this question














      I am trying to write the code for a generic Stack using Singly Linked List in C. I am trying to use (void *) as the data type in each of its functions like:



      node* getNode(void *, size_t);



      void append(node **, size_t); etc.



      The structure for each node is:



      typedef struct linked_list{
      void *data;
      struct linked_list *next; }node;


      In the getNode function mentioned above I am trying to do this:



      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;}


      I could not find how to assign the data part without knowing the data type, but only using the data_size variable. I found out about the memcopy function, but even that requires the data type.



      Please help.







      c adt dynamic-memory-allocation void-pointers






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Nov 13 '18 at 2:59









      The ViperThe Viper

      7810




      7810
























          1 Answer
          1






          active

          oldest

          votes


















          3














          If you only want to save a pointer to the data, you can just copy the pointer:



          newNode->data = data;


          If you want to copy what it points to, you need malloc to get the memory and memcpy to copy the bytes:



          newNode->data = malloc(data_size);
          memcpy(newNode->data, data, data_size);


          The signature of memcpy is:



          void *memcpy(void *dest, const void *src, size_t n);


          It's meant to copy generic memory, so you can pass it a void * for both the source and destination.






          share|improve this answer
























          • Doesn't memcpy require data type?

            – The Viper
            Nov 13 '18 at 3:46











          • @TheViper No, just a pointer.

            – dbush
            Nov 13 '18 at 3:47











          • okay, thank you @dbush

            – The Viper
            Nov 13 '18 at 3:48











          Your Answer






          StackExchange.ifUsing("editor", function () {
          StackExchange.using("externalEditor", function () {
          StackExchange.using("snippets", function () {
          StackExchange.snippets.init();
          });
          });
          }, "code-snippets");

          StackExchange.ready(function() {
          var channelOptions = {
          tags: "".split(" "),
          id: "1"
          };
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function() {
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled) {
          StackExchange.using("snippets", function() {
          createEditor();
          });
          }
          else {
          createEditor();
          }
          });

          function createEditor() {
          StackExchange.prepareEditor({
          heartbeatType: 'answer',
          autoActivateHeartbeat: false,
          convertImagesToLinks: true,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: 10,
          bindNavPrevention: true,
          postfix: "",
          imageUploader: {
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          },
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          });


          }
          });














          draft saved

          draft discarded


















          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53273150%2fhow-to-write-to-a-void-pointer-without-knowing-the-data-type%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown

























          1 Answer
          1






          active

          oldest

          votes








          1 Answer
          1






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes









          3














          If you only want to save a pointer to the data, you can just copy the pointer:



          newNode->data = data;


          If you want to copy what it points to, you need malloc to get the memory and memcpy to copy the bytes:



          newNode->data = malloc(data_size);
          memcpy(newNode->data, data, data_size);


          The signature of memcpy is:



          void *memcpy(void *dest, const void *src, size_t n);


          It's meant to copy generic memory, so you can pass it a void * for both the source and destination.






          share|improve this answer
























          • Doesn't memcpy require data type?

            – The Viper
            Nov 13 '18 at 3:46











          • @TheViper No, just a pointer.

            – dbush
            Nov 13 '18 at 3:47











          • okay, thank you @dbush

            – The Viper
            Nov 13 '18 at 3:48
















          3














          If you only want to save a pointer to the data, you can just copy the pointer:



          newNode->data = data;


          If you want to copy what it points to, you need malloc to get the memory and memcpy to copy the bytes:



          newNode->data = malloc(data_size);
          memcpy(newNode->data, data, data_size);


          The signature of memcpy is:



          void *memcpy(void *dest, const void *src, size_t n);


          It's meant to copy generic memory, so you can pass it a void * for both the source and destination.






          share|improve this answer
























          • Doesn't memcpy require data type?

            – The Viper
            Nov 13 '18 at 3:46











          • @TheViper No, just a pointer.

            – dbush
            Nov 13 '18 at 3:47











          • okay, thank you @dbush

            – The Viper
            Nov 13 '18 at 3:48














          3












          3








          3







          If you only want to save a pointer to the data, you can just copy the pointer:



          newNode->data = data;


          If you want to copy what it points to, you need malloc to get the memory and memcpy to copy the bytes:



          newNode->data = malloc(data_size);
          memcpy(newNode->data, data, data_size);


          The signature of memcpy is:



          void *memcpy(void *dest, const void *src, size_t n);


          It's meant to copy generic memory, so you can pass it a void * for both the source and destination.






          share|improve this answer













          If you only want to save a pointer to the data, you can just copy the pointer:



          newNode->data = data;


          If you want to copy what it points to, you need malloc to get the memory and memcpy to copy the bytes:



          newNode->data = malloc(data_size);
          memcpy(newNode->data, data, data_size);


          The signature of memcpy is:



          void *memcpy(void *dest, const void *src, size_t n);


          It's meant to copy generic memory, so you can pass it a void * for both the source and destination.







          share|improve this answer












          share|improve this answer



          share|improve this answer










          answered Nov 13 '18 at 3:02









          dbushdbush

          93.9k12101134




          93.9k12101134













          • Doesn't memcpy require data type?

            – The Viper
            Nov 13 '18 at 3:46











          • @TheViper No, just a pointer.

            – dbush
            Nov 13 '18 at 3:47











          • okay, thank you @dbush

            – The Viper
            Nov 13 '18 at 3:48



















          • Doesn't memcpy require data type?

            – The Viper
            Nov 13 '18 at 3:46











          • @TheViper No, just a pointer.

            – dbush
            Nov 13 '18 at 3:47











          • okay, thank you @dbush

            – The Viper
            Nov 13 '18 at 3:48

















          Doesn't memcpy require data type?

          – The Viper
          Nov 13 '18 at 3:46





          Doesn't memcpy require data type?

          – The Viper
          Nov 13 '18 at 3:46













          @TheViper No, just a pointer.

          – dbush
          Nov 13 '18 at 3:47





          @TheViper No, just a pointer.

          – dbush
          Nov 13 '18 at 3:47













          okay, thank you @dbush

          – The Viper
          Nov 13 '18 at 3:48





          okay, thank you @dbush

          – The Viper
          Nov 13 '18 at 3:48


















          draft saved

          draft discarded




















































          Thanks for contributing an answer to Stack Overflow!


          • Please be sure to answer the question. Provide details and share your research!

          But avoid



          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.


          To learn more, see our tips on writing great answers.




          draft saved


          draft discarded














          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53273150%2fhow-to-write-to-a-void-pointer-without-knowing-the-data-type%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown





















































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown

































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown







          Popular posts from this blog

          Florida Star v. B. J. F.

          Error while running script in elastic search , gateway timeout

          Adding quotations to stringified JSON object values