gpt4 book ai didi

c - 如何使用 malloc 为 C 中的结构创建动态内存分配?

转载 作者:太空宇宙 更新时间:2023-11-04 07:55:14 24 4
gpt4 key购买 nike

我想为“标题”动态分配内存,因为我不知道标题会有多长时间。我有以下代码:

#include<stdio.h>
#include<malloc.h>

struct film {
char title[500];
int year;
int duration;
int earnings;
};

void main() {
int n;
scanf("%d", &n);
int array[n], i = 0;
struct film user[n];

while (i < n) {
scanf("%s", &user[i].title);
scanf("%d", &user[i].year);
scanf("%d", &user[i].duration);
scanf("%d", &user[i].earnings);
i += 1;
}
}

我尝试替换:

char title[500];

与:

char *title = (char*)malloc(sizeof(char));

然而,它并没有奏效。它说它在“=”之前期待其他东西。另外,如果标题是动态分配的,我该如何扫描用户输入的标题?

以后如何释放内存?我假设它如下所示:

void freememory(struct film target,  n) { //n is size of structure
int i = 0;
while (i < n) {
free(target[i].title);
i += 1;
}

正确吗?

最佳答案

结构部分只是一个声明,你不能在那里执行任何代码。 malloc 只能在运行时执行。意味着你的结构应该是

typedef struct {
char* title;
int year;
int duration;
int earnings;
} film;

后来

film user[n];

for(int i=0; i<n; i++)
{
char title [200];
scanf("%s", title); // scan to temporary buffer since we don't know length
...

user[i]->title = malloc(strlen(title) + 1); // alloc just as much as is needed
}

您的 free() 代码有效。

请注意这段代码相当幼稚;像这样微管理内存在实际应用中可能不是最好的主意。选择一个固定的最大字符串长度,然后确保输入不超过它可能是一个更好的计划,方法是使用 fgets 而不是 scanf

关于c - 如何使用 malloc 为 C 中的结构创建动态内存分配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50588623/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com