C 将另一个结构放入其中

C 将另一个结构放入其中,c,structure,C,Structure,如何从类别结构中正确访问价格成员 代码如下: #include <stdio.h> #include <stdlib.h> #include <string.h> #define SMAX 128 typedef struct { int price; char favCharacter[SMAX], edition[SMAX]; } category; typedef struct { char title[SMAX], fname[SMA

如何从类别结构中正确访问价格成员

代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define SMAX 128

typedef struct {
  int price;
  char favCharacter[SMAX], edition[SMAX];
} category;

typedef struct {
  char title[SMAX], fname[SMAX], lname[SMAX];
  category *cat;
} book;

int main(int argc, char **argv) {

  book *data = malloc(100 * sizeof(book));
  (data->cat)->price = 10; //1
  printf("\n\n(*(data->cat)).price is: %d%s", (data->cat)->price, "\n\n");

  return 0;

}
#包括
#包括
#包括
#定义SMAX 128
类型定义结构{
国际价格;
字符favCharacter[SMAX],版本[SMAX];
}类别;
类型定义结构{
字符标题[SMAX],fname[SMAX],lname[SMAX];
类别*猫;
}书;
int main(int argc,字符**argv){
账簿*数据=malloc(100*sizeof(账簿));
(数据->目录)->price=10;//1
printf(“\n\n(*(数据->目录))。价格为:%d%s”,(数据->目录)->价格,”\n\n“;
返回0;
}
我的第一次尝试失败(//1)
解决这个问题的正确方法是什么?(我的意思是有一个结构和另一个结构)。

您正在为
书籍
分配内存,但不是为书籍中的
cat
分配内存。下面是一个例子:

/* allocate a hundred books */
book *data = malloc(100 * sizeof *data);
/* allocate one cat per book */
for (i = 0; i < 100; ++i)
    data[i].cat = malloc(sizeof *data[i].cat);

/* now you can use it */
for (i = 0; i < 100; ++i)
    data[i].cat->price = 50;
/*分配一百本书*/
book*data=malloc(100*sizeof*data);
/*每本书分配一只猫*/
对于(i=0;i<100;++i)
数据[i].cat=malloc(sizeof*data[i].cat);
/*现在你可以使用它了*/
对于(i=0;i<100;++i)
数据[i].类别->价格=50;
注意:在继续使用返回的内存之前,需要添加检查以确保
malloc
不会失败。此外,最好避免使用上面的幻数,如
100
。此外,不要忘记以后释放内存。

更改

book *data = malloc(100 * sizeof(book));
(data->cat)->price = 10; //1
printf("\n\n(*(data->cat)).price is: %d%s", (data->cat)->price, "\n\n");

//1。需要显式转换吗
账簿*数据=(账簿*)malloc(100*sizeof(账簿));
// 2. 为book*数据分配类别
对于(inti=0;iprice=10;
//4.阅读
printf(“\n\n(*(数据->目录))。价格为:%d%s”,(数据[0]。目录)->价格,”\n\n“;

您正在分配一系列图书:

book *data = malloc(100 * sizeof(book));
因此,您应该在访问数组元素的内容之前访问它:

data[0].cat->price = 10; // lets access element 0 for example.
但是,首先,还必须为每个数组元素内的
cat
变量分配数据:

for ( int i = 0; i < 100; i++ ) {
    data[i].cat = malloc(sizeof(category));
}
for(int i=0;i<100;i++){
数据[i].cat=malloc(sizeof(category));
}
现在您可以正确地访问元素了


别忘了释放分配的内存。

只有一个问题:如果我声明一个像这样的book变量:book data;,我需要为cat指针分配内存?是的。
cat
是一个指针,它指向……嗯……直到你给它分配了某个完全随机的地方。所以无论你如何得到
book
s,它都是一个指针
cat
s仍然是需要初始化以指向某个对象的指针。
for ( int i = 0; i < 100; i++ ) {
    data[i].cat = malloc(sizeof(category));
}