C中指向结构的指针
我正在学习c语言中的结构指针,我编写了以下学习代码:C中指向结构的指针,c,string,pointers,structure,c-strings,C,String,Pointers,Structure,C Strings,我正在学习c语言中的结构指针,我编写了以下学习代码: #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct { int id; char *name; }struct_type_t; void set_struct(struct_type_t **); int main(int argc, char *argv[]) { struct_ty
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct
{
int id;
char *name;
}struct_type_t;
void set_struct(struct_type_t **);
int main(int argc, char *argv[])
{
struct_type_t *m = NULL;
set_struct(&m);
printf("%d\n", m->id);
//fflush(stdout);
printf("%s\n", m->name);
return 0;
}
void set_struct(struct_type_t **m)
{
struct_type_t t;
*m = &t;
(*m)->id = 5;
(*m)->name = "Pointer To Structure";
}
#包括
#包括
#包括
类型定义结构
{
int-id;
字符*名称;
}结构类型;
空集结构(结构类型**);
int main(int argc,char*argv[])
{
结构类型为空;
设置结构(&m);
printf(“%d\n”,m->id);
//fflush(stdout);
printf(“%s\n”,m->name);
返回0;
}
空集结构(结构类型**m)
{
结构类型;
*m=&t;
(*m)->id=5;
(*m)->name=“指向结构的指针”;
}
函数set_struct
通过将指向structurestruct_type*m的指针地址传递给函数来设置结构成员
但是在main函数的printf行中,它不打印结构的字符串成员name
,而是只打印整数成员id
我已经习惯了,但仍然不工作
请帮助我更正此代码并检查出了什么问题……您返回指向本地对象的指针。它是在堆栈上创建的。您不应该在函数完成其工作后使用它,因为它不再存在,并且它的内存可能包含其他对象
使用malloc
在堆上分配内存块,初始化它并使用它,直到对其调用free
。返回指向本地对象的指针。它是在堆栈上创建的。您不应该在函数完成其工作后使用它,因为它不再存在,并且它的内存可能包含其他对象
使用malloc
在堆上分配内存块,初始化它并使用它,直到对其调用free
。您的*m
是一个指针,等于NULL
。因此,使用malloc有一个指向您的struct\u type\t
的指针,您可以在之后释放它
void set_struct(struct_type_t **m)
{
*m = (struct_type_t *)malloc(sizeof(struct_type_t));
(*m)->id = 5;
(*m)->name = strdup("Pointer To Structure");
// or: (*m)->name = "Pointer To Structure";
}
您的*m
是一个指针,等于NULL
。因此,使用malloc有一个指向您的struct\u type\t
的指针,您可以在之后释放它
void set_struct(struct_type_t **m)
{
*m = (struct_type_t *)malloc(sizeof(struct_type_t));
(*m)->id = 5;
(*m)->name = strdup("Pointer To Structure");
// or: (*m)->name = "Pointer To Structure";
}
@harianja是未定义的行为,因为该对象超出scope@CoffeeandCode如果它超出范围,那么为什么它仍然打印结构的id成员?@harianja Undefined behavior。隐藏你的妻子和孩子,因为任何事情都有可能发生。@harianja,这是一种未定义的行为,因为那个物体不存在scope@CoffeeandCode如果它超出范围,那么为什么它仍然打印结构的id成员?@harianja Undefined behavior。隐藏你的妻子和孩子,因为任何事情都可能发生。