Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在c结构中使用指向字符的指针?_C_Struct_Char_Malloc - Fatal编程技术网

如何在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
分配内存。