구조체를 초기화하고 반환 값으로 다시 전달하는 함수를 만들려고하는데 작동하지 못합니다. 나는 어디에서 실수 했습니까? 세그먼트 오류 오류가 발생합니다.함수의 반환 값에 의한 C struct 초기화
는#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 *'를 반환하면, 당신의 관심사는 합법적 일 것이다. –