구조체변수를 함수인자에

thsckdgus9의 이미지

#include <stdio.h>
struct student
{
	char name[24];
	int id;
	int score;
};
void db(struct student *rec)
{
	scanf_s("%d %s %d", rec->id, rec->name, rec->score);
 
}
int main()
{
	struct student *record;
	db(&record);
	printf("%d %s %d", record->id, record->name, record->score);
	return 0;
}

간단한 소스인데 왜 에러가 나는지 모르겠네요..ㅠㅠ

첨부파일에 디버깅해서 에러사항을 캡쳐했습니다!!!!!!!

File attachments: 
첨부파일 크기
Image icon tlqkfdpfj.PNG13.04 KB
ml의 이미지

실제 공간이 없잖아요?

당연히 메모리 액세스 위반입니다.

new 내지는 malloc이 필요하겠지요

ml의 이미지

main 본문의 ...

struct student *record;

를, 이를 패러미터로 취하는 데 &record 로 주고 있기도 하네요.

thsckdgus9의 이미지

패러미터를 *rec으로 주고 변수를 record라고 선언해서 함수인자넣을때 포인터는 &가 필요하다고 알고있습니다!

ml의 이미지

struct student *record;
^ -- 이것
db(&record);
^ -- 이것

void db(struct student *rec)
^ -- 이것

scanf_s("%d %s %d", &(rec->id), rec->name, sizeof(rec->name), &(rec->score));
^ -- 이것 ^ -- 이것

익명 사용자의 이미지

1. struct student* record; / db(&record);
main()의 변수, *가 아닌 변수겠죠.. 아니면 동적으로 요구를 해야할거구요 (malloc)
*라면 그냥 record를 줘야할거고, 아니라면 &을 붙여서 줘야겠죠 (주소를 주어야하니)

2. db함수에서.
scanf_s의 형식에 따라 위와같이 고쳐주어야 하겠죠? rec->id, score는 %d니 주소를 주어야하고..
문자열은 이름과 길이를 주어야하겠죠? (_s 함수니까요)

#include <stdio.h>
#include <stdlib.h>
 
struct student
{
	char name[24];
	int id;
	int score;
};
void db(struct student *rec)
{
	scanf_s( "%d %s %d", &(rec->id), rec->name, sizeof(rec->name), &(rec->score) );
}
int main()
{
	struct student* record;
	record = malloc( sizeof(struct student)*1 );
 
	db( record );
	printf("%d %s %d", record->id, record->name, record->score);
 
	free( record );
	return 0;
}