可以使用char name[size]
声明所需大小的字符串,但是如果我想使用char *name
,我将如何指定我需要使用的大小malloc()
?如何在c结构中使用指向字符的指针?
我发现在结构声明中我不能使用char *name = malloc(5*1);
。
我一直在使用
struct data
{
int age;
char *name;
};
在运行该代码,并进入我遇到分割故障字符串尝试。 如何指定尺寸?
可以使用char name[size]
声明所需大小的字符串,但是如果我想使用char *name
,我将如何指定我需要使用的大小malloc()
?如何在c结构中使用指向字符的指针?
我发现在结构声明中我不能使用char *name = malloc(5*1);
。
我一直在使用
struct data
{
int age;
char *name;
};
在运行该代码,并进入我遇到分割故障字符串尝试。 如何指定尺寸?
假设您创建类型struct data
struct data a;
现在分配内存的a
即名成员的变量a
,
a.name = malloc(size_of_name + 1); //+1 for '\0' character at the end
现在你可以使用a.name
存储和使用字符串
不要忘记在终止程序之前释放分配的数据。为此使用free(a.name)
。
您需要指定指针的大小,你需要做的指针指向有效的内存,这就是全部。此外,它不需要使用malloc()
。您可以
malloc()
或家庭char
变量(或阵列)要细说,你的地址分配内存的指针创建类型struct data
的变量var
,然后使var->name
指向有效的内存块。
也就是说,要使用malloc()
分配所需的内存大小,您需要提供所需的大小作为参数malloc()
(以字节为单位)。
您需要分配内存,如:
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'后为'name'分隔'malloc'内存。 –