可以使用char name[size]
声明所需大小的字符串,但是,如果我想使用char *name
,我将如何指定使用malloc()
的大小?
我发现我不能在结构声明中使用char *name = malloc(5*1);
。
我尝试使用
struct data
{
int age;
char *name;
};
运行此代码并输入我遇到的细分故障的字符串。我必须如何指定大小?
您需要指定指针的大小,您需要将指针指向有效内存,仅此而已。此外,使用malloc()
并非必要。您可以
- 通过分配器功能,
malloc()
或family分配内存到指针 - 将指针指向任何其他
char
变量(或数组)的地址
要详细说明,您可以创建一个类型struct data
的可变var
,然后将var->name
指向有效的内存块。
也就是说,要使用malloc()
来分配所需的内存尺寸,您需要将所需的大小作为malloc()
(以字节)的参数提供。
假设您创建了类型struct data
a
struct data a;
现在将内存分配给a
的名称成员,
a.name = malloc(size_of_name + 1); //+1 for ' ' character at the end
现在您可以使用a.name
存储并使用字符串
不要忘记在终止程序之前释放分配的数据。为此使用free(a.name)
。
您需要分配以下记忆:
data* r = malloc(sizeof(data));
r->name= malloc(20);
假设名称可以容纳20个字符
您需要提供一种初始化结构的方法。例如:
void init_data (struct data *p_data) {
if (p_data)
p_data->name = malloc(STR_LEN);
}
您应该将其与函数搭配以释放内存:
void release_data (struct data *p_data) {
if (p_data)
free(p_data->name);
}
每当您想使用结构时,它都会被调用。
struct data d;
init_data(&d);
/* use d */
release_data(&d);