我正在关注Learn C the Hard Way这本书,当我尝试运行这个程序时,我收到了这个错误消息:
从“void*”转换为指向非“void”的指针需要显式转换。
我不确定如何解决这个问题,我是否必须更改结构中的返回变量?
无论如何,看看这里的代码:(在 Visual C++ 2010 上编译,还没有尝试过 GCC)。
   //learn c the hardway
  #include <assert.h>
  #include <stdlib.h>
  #include <string.h> 
  #include <stdio.h>
  struct Person {
      char *name;
      int age;
      int height;
      int weight; 
  };
  struct Person *Person_create(char *name, int age, int height, int weight) 
  {
      struct Person *who = malloc(sizeof(struct Person)); 
      assert(who != NULL);
      who->name = strdup(name);
      who->age = age; 
      who->height = height;
      who->weight = weight;
      return who;
  } 
  void Person_destroy(struct Person *who)
  {
      assert(who != NULL);
      free(who->name);
      free(who);
  }
  void Person_print(struct Person *who) 
  {
      printf("Name: %s\n", who->name);
      printf("\tAge: %d\n", who->age); 
      printf("\tHeight: %d\n", who->height);
      printf("\tWeight: %d\n", who->weight); 
  }
  int main(int argc, char *argv[])
  {
      // make two people structures 
      struct Person *joe = Person_create(
              "Joe Alex", 32, 64, 140);
      struct Person *frank = Person_create(
              "Frank Blank", 20, 72, 180); 
      // print them out and where they are in memory 
      printf("Joe is at memory location %p:\n", joe);
      Person_print(joe);
      printf("Frank is at memory location %p:\n", frank);
      Person_print(frank); 
      // make everyone age 20 years and print them again 
      joe->age += 20;
      joe->height -= 2;
      joe->weight += 40; 
      Person_print(joe);
      frank->age += 20;
      frank->weight += 20; 
      Person_print(frank);
      // destroy them both so we clean up 
      Person_destroy(joe);
      Person_destroy(frank);
      return 0;
  }