似乎可以在结构内部传递结构,有什么想法吗?

标签 c struct

每次我尝试初始化一个结构体以放置在名为“meal”的数组中,该数组包含一个结构体和一个整数时,都会出现以下错误:

..\meal_plan.c:92:5:警告:初始化器周围缺少大括号 [-Wmissing-braces]

..\meal_plan.c:92:5:警告:(接近“fpi1.fs”初始化)[-Wmissing-braces]

..\meal_plan.c:92:5:警告:初始化从指针生成整数而不进行强制转换[默认启用]

..\meal_plan.c:92:5:警告:(“fpi1.fs.name[0]”接近初始化)[默认启用]

我一生都无法弄清楚出了什么问题。我真的很感激有人对我所缺少的东西发表意见。

  struct food_stuff
  {
      char name [30];
      int foodtype;
      int calories;
      int price;
  };

  typedef struct food_stuff food_stuff;

  struct food_plan_item
   {
      food_stuff fs;
      int qty;
  };

  typedef struct food_plan_item food_plan_item;

food_plan_item 膳食 [50];

  void choose_food_item()
  {
      puts("Please select one of the available foods:");
      puts("-----------------------------------------");


      for(int i =  0;i <f_cnt;i++)
      {
          printf("\t(%d.) %s\n",i, (foodArray+i)->name);
      }
      puts("-----------------------------------------");
      fflush(stdout);

      char itemSelection [3];
      int chosenitem;

      gets(itemSelection);

      sscanf(itemSelection,"%d",&chosenitem);

      food_stuff *pfs;
      pfs = (foodArray+chosenitem);

      food_plan_item fpi1 = {pfs,1}; **(LINE 92)**

      add_food_plan_item(&fpi1);


  }

  void add_food_plan_item(food_plan_item *p_fpi)
  {

      meal[fpi_count] = *p_fpi;


      fpi_count++;
  }

最佳答案

您必须将 pfs 指向的内容复制到 fpi1.fs

food_plan_item fpi1 = {.qty = 1}; // designated initializer

memcpy(&fpi1.fs, pfs, sizeof(food_stuff));

或者您可以将 food_plan_itemfs 成员声明为指针,然后直接分配指针:

food_stuff *fs;

关于似乎可以在结构内部传递结构,有什么想法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20578091/

相关文章:

c - C/C++ 中的引用/取消引用

java - windows下socket读取超时: strange hardcode in native method

go - 为什么在 Go 中使用 "redundant"关键字 "struct"作为类型?

c# - 有一个循环来创建结构

自定义警告为 printf 的 "too many arguments for format"

c - 合并两个数组并省略所有重复元素

c - 在函数中传递结构成员

c - 你如何在 C 中定义一个不透明的结构数组?

c - 学生结构问题

c - 如何从结构中释放 size_t