我试图做一个函数来初始化一个结构并将其传回给它的返回值,但是我无法让它工作。我在哪里犯了一个错误?我收到了分段错误错误。通过函数的返回值来初始化C结构体
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct {
int id;
char *name;
} Object;
Object object_ctor(int id, char *name);
int main()
{
Object x;
x = object_ctor(1, "Alex");
printf("%s\n", x.name);
return 0;
}
Object object_ctor(int id, char *name)
{
Object y;
y.id = id;
y.name = *name;
return y;
}
Y是本地堆栈。功能退出时不再使用。需要使用堆 – OldProgrammer
您正在取消引用'object_ctor'的名称。不要这样做。尽管你可能想要使用'strdup(name)'或类似的东西,所以你有一个堆分配版本的字符串,因为如果你从另一个函数调用'object_ctor',指针可能指向一个分配给它的字符串堆栈(即不再存在)。 – Goodies
@OldProgrammer:完全可以返回一个局部变量(副本),例如一个结构体。不允许的是返回一个指向局部变量的指针。如果函数返回一个“Object *”,那么你的担心是合法的。 –