구조체변수를 함수인자에
글쓴이: thsckdgus9 / 작성시간: 화, 2018/04/10 - 9:48오후
#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:
첨부 | 파일 크기 |
---|---|
tlqkfdpfj.PNG | 13.04 KB |
Forums:
포인터..
실제 공간이 없잖아요?
당연히 메모리 액세스 위반입니다.
new 내지는 malloc이 필요하겠지요
다시보니..
main 본문의 ...
struct student *record;
를, 이를 패러미터로 취하는 데 &record 로 주고 있기도 하네요.
잘모르겠ㅅ브니다
패러미터를 *rec으로 주고 변수를 record라고 선언해서 함수인자넣을때 포인터는 &가 필요하다고 알고있습니다!
struct student *record;
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; /
1. struct student* record; / db(&record);
main()의 변수, *가 아닌 변수겠죠.. 아니면 동적으로 요구를 해야할거구요 (malloc)
*라면 그냥 record를 줘야할거고, 아니라면 &을 붙여서 줘야겠죠 (주소를 주어야하니)
2. db함수에서.
scanf_s의 형식에 따라 위와같이 고쳐주어야 하겠죠? rec->id, score는 %d니 주소를 주어야하고..
문자열은 이름과 길이를 주어야하겠죠? (_s 함수니까요)
댓글 달기