如何在c结构中使用指向字符的指针?
可以使用如何在c结构中使用指向字符的指针?,c,struct,char,malloc,C,Struct,Char,Malloc,可以使用char name[size]声明所需大小的字符串,但是如果我想使用char*name,我将如何使用malloc()指定所需的大小 我发现我不能使用char*name=malloc(5*1) 我试过使用 struct data { int age; char *name; }; 在运行此代码并输入字符串时,我遇到了分段错误。 我必须如何指定大小?您需要指定指针的大小,您需要使指针指向有效内存,仅此而已。此外,不必使用malloc()。你也可以 通过分配器函数、mall
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()
的参数(以字节为单位)。假设您创建了结构数据类型的变量a
struct data a;
现在将内存分配给a
的名称成员,即
a.name = malloc(size_of_name + 1); //+1 for '\0' character at the end
现在您可以使用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);
在定位了struct
之后,需要分别malloc
为name
分配内存。