c - 结构与另一个结构

标签 c structure

如何从 category 结构中正确访问 price 成员?

这是代码:

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

}

我的第一次尝试失败了 (//1) 解决这个问题的正确方法是什么? (我的意思是有一个结构与另一个结构)

最佳答案

您正在为 book 分配内存,而不是为书中的 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;

注意:您需要添加检查以确保 malloc 在继续使用返回的内存之前不会失败。此外,最好避免上面的 100 等魔数(Magic Number)。此外,不要忘记稍后释放内存。

关于c - 结构与另一个结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21352266/

相关文章:

c - C 中的箭头。在中间插入新元素

c++ - for 循环和 if 条件中的 continue 语句

c - Xcode调试窗口如何改变unicode字符串的显示格式?

c - 为什么这个结构的这个成员没有打印出来(C 编程)

html - 如何在 Django 中使用 CSS block 内容组织 HTML

c - 释放指针重新分配自身?

c - 跨函数调用保留结构体的成员值

c - 值存储在结构中

c - Valgrind 在二维数组中读取 1 的大小无效

c - 如何使用#ifdef 实体作为头文件中函数的一部分