如何在c结构中使用指向字符的指针?

时间:2016-11-29 13:05:52

标签: c struct char malloc

可以使用char name[size]声明所需大小的字符串,但是如果我想使用char *name,我将如何使用malloc()指定所需的大小?< / p>

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

我尝试过使用

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

运行此代码并输入字符串时遇到Segmentation fault。 我该如何指定尺寸?

4 个答案:

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