2016-11-29 71 views
2

可以使用char name[size]声明所需大小的字符串,但是如果我想使用char *name,我将如何指定我需要使用的大小malloc()如何在c结构中使用指向字符的指针?

我发现在结构声明中我不能使用char *name = malloc(5*1);

我一直在使用

struct data 
{ 
    int age; 
    char *name; 
}; 

在运行该代码,并进入我遇到分割故障字符串尝试。 如何指定尺寸?

+2

您需要在分配'struct'后为'name'分隔'malloc'内存。 –

回答

1

假设您创建类型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)

4

您需要指定指针的大小,你需要做的指针指向有效的内存,这就是全部。此外,它不需要使用malloc()。您可以

  • 通过分配器功能,malloc()或家庭
  • 使指针指向任何其他char变量(或阵列)

要细说,你的地址分配内存的指针创建类型struct data的变量var,然后使var->name指向有效的内存块。

也就是说,要使用malloc()分配所需的内存大小,您需要提供所需的大小作为参数malloc()(以字节为单位)。

1

您需要分配内存,如:

data* r = malloc(sizeof(data)); 
r->name= malloc(20); 

假设名称可容纳20个字符

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);