【问题标题】:How to use a pointer to character within a c structure?如何在 c 结构中使用指向字符的指针?
【发布时间】:2017-04-13 11:53:09
【问题描述】:

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

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

我尝试过使用

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

在运行此代码并输入字符串时,我遇到了分段错误。 我必须如何指定尺寸?

【问题讨论】:

  • 分配struct后,需要为name单独分配malloc的内存。

标签: c struct char malloc


【解决方案1】:

你需要指定指针的大小,你需要让指针指向一个有效的内存,仅此而已。此外,没有必要使用malloc()。你可以

  • 通过分配器函数malloc() 或family 为指针分配内存
  • 使指针指向任何其他char变量(或数组)的地址

具体来说,您创建一个struct data 类型的变量var,然后使var->name 指向一个有效的内存块。

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

【讨论】:

    【解决方案2】:

    假设您创建了一个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)

    【讨论】:

      【解决方案3】:

      你需要像这样分配内存:

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

      假设名称可以容纳 20 个字符

      【讨论】:

        【解决方案4】:

        您需要提供一种方法来初始化您的结构。例如:

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

        【讨论】:

          猜你喜欢
          • 2010-09-25
          • 2021-07-14
          • 1970-01-01
          • 2020-10-30
          • 1970-01-01
          • 2016-08-25
          • 1970-01-01
          • 2018-11-03
          • 1970-01-01
          相关资源
          最近更新 更多