可以使用char name[size]
声明所需大小的字符串,但是如果我想使用char *name
,我将如何使用malloc()
指定所需的大小?< / p>
我发现我不能在结构声明中使用char *name = malloc(5*1);
。
我尝试过使用
struct data
{
int age;
char *name;
};
运行此代码并输入字符串时遇到Segmentation fault。 我该如何指定尺寸?
答案 0 :(得分:3)
你需要指定指针的大小,你需要使指针指向一个有效的内存,这就是全部。此外,使用malloc()
并非必要。你可以
malloc()
或系列char
变量(或数组)的地址详细说明,您创建了var
类型的变量struct data
,然后使var->name
指向一个有效的内存块。
也就是说,要使用malloc()
来分配所需的内存大小,您需要提供所需的大小作为malloc()
的参数(以字节为单位)。
答案 1 :(得分:1)
假设您创建了a
struct data
struct data a;
现在将内存分配给a
的名称成员,即
a.name = malloc(size_of_name + 1); //+1 for '\0' character at the end
现在您可以使用a.name
来存储和使用字符串
在终止程序之前,不要忘记释放已分配的数据。使用free(a.name)
。
答案 2 :(得分:1)
您需要分配内存,如:
data* r = malloc(sizeof(data));
r->name= malloc(20);
假设名称可以容纳20个字符
答案 3 :(得分:1)
您需要提供一种初始化结构的方法。例如:
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);