MST

星途 面试题库

面试题:C语言结构体初始化:动态内存与复杂嵌套

假设你有一个结构体 `book`,包含书名(动态分配内存的字符串)、作者(同样动态分配内存的字符串)和出版年份。定义该结构体,并编写代码在堆上创建 `book` 结构体实例,并正确初始化其成员。接着,定义一个 `library` 结构体,它包含一个 `book` 结构体数组和图书馆的名称,对 `library` 结构体进行初始化。
37.1万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

// 定义book结构体
typedef struct {
    char *title;
    char *author;
    int year;
} book;

// 定义library结构体
typedef struct {
    book *books;
    int bookCount;
    char *libraryName;
} library;

int main() {
    // 在堆上创建book结构体实例并初始化
    book *newBook = (book *)malloc(sizeof(book));
    if (newBook == NULL) {
        fprintf(stderr, "内存分配失败\n");
        return 1;
    }
    newBook->title = (char *)malloc(strlen("示例书名") + 1);
    if (newBook->title == NULL) {
        fprintf(stderr, "内存分配失败\n");
        free(newBook);
        return 1;
    }
    strcpy(newBook->title, "示例书名");
    newBook->author = (char *)malloc(strlen("示例作者") + 1);
    if (newBook->author == NULL) {
        fprintf(stderr, "内存分配失败\n");
        free(newBook->title);
        free(newBook);
        return 1;
    }
    strcpy(newBook->author, "示例作者");
    newBook->year = 2023;

    // 创建library结构体并初始化
    library newLibrary;
    newLibrary.books = newBook;
    newLibrary.bookCount = 1;
    newLibrary.libraryName = (char *)malloc(strlen("示例图书馆") + 1);
    if (newLibrary.libraryName == NULL) {
        fprintf(stderr, "内存分配失败\n");
        free(newBook->title);
        free(newBook->author);
        free(newBook);
        return 1;
    }
    strcpy(newLibrary.libraryName, "示例图书馆");

    // 使用完后释放内存
    free(newBook->title);
    free(newBook->author);
    free(newBook);
    free(newLibrary.libraryName);

    return 0;
}