我試圖做一個函數來初始化一個結構並將其傳回給它的返回值,但是我無法讓它工作。我在哪裏犯了一個錯誤?我收到了分段錯誤錯誤。通過函數的返回值來初始化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 *」,那麼你的擔心是合法的。 –