在结构内部打印结构

Posted

技术标签:

【中文标题】在结构内部打印结构【英文标题】:Printing Structs inside Structs 【发布时间】:2021-07-12 06:20:34 【问题描述】:

我想打印结构的结构。我的代码目前看起来是这样的:(这里我没有粘贴,但是 Shelf 只是一个 struct Shelf 的 typedef)。

struct shelf 
    struct book *books;
    struct shelf *next;
;

struct book 
    int text;
    int image;
    struct book *next;
;

Shelf create_shelf(void) 
    Shelf new_shelf = malloc(sizeof (struct shelf));
    new_shelf->next = NULL;
    new_shelf->books = NULL;
    return new_shelf;


我现在想像这样打印我的书架、里面的书以及每本书中的每个图像和文本:

输出: , , ... 等等,其中 text1 和 image1 指的是 book1。

我已经开始尝试编写此代码,但我无法理解下面的打印功能有什么问题。我将如何处理打印所有内容同时只允许输入“货架货架”作为我的函数中的参数?

void print_everything (Shelf shelf) 
    while (shelf != NULL) 
        printf("%d, %d", shelf->books->text, shelf->books->image);
    

谢谢!

【问题讨论】:

使您的print_everything 跟随next 指针,直到它到达列表的末尾。现在,当您传递一个非空参数时,它是一个无限循环。 上面的代码还能运行吗? 请提供minimal reproducible example。 你确定文字和图片应该只是数字吗? 【参考方案1】:

考虑到Shelfstruct shelf * 的typedef 而不是struct shelf

  void print_everything (Shelf shelf) 
        while (shelf != NULL) 
            printf("%d, %d", shelf->books->text, shelf->books->image);
            shelf = shelf -> next; // Add this line
        
    

【讨论】:

Don't cast the return value of malloc. 糟糕,sizeof(Shelf) 只是指针的大小。 @DavidGrayson 感谢您指出! 格式说明符字符串周围的引号怎么样? 考虑从不在typedef中隐藏指针?

以上是关于在结构内部打印结构的主要内容,如果未能解决你的问题,请参考以下文章

ORACLE 窥视索引内部结构(上)

CH559l单片机入门篇通过串口打印内部ID信息

简述ic卡芯片内部结构,工作原理及应用。

简述ic卡芯片内部结构,工作原理及应用。

C#:指向结构内部结构的指针

ScriptProcessorNode 内部结构