몇가지 여쭈어 봅니다

익명 사용자의 이미지

어떤 파일에서 다음과 같은 데이타가 있다고 가정하고..
--------
학번 2000111111
이름 우리집
첫인상 안좋음
-------

-------라는 구분자가 나오기 전까지 이것을 field와 value로 구분하여
구조체로 설정하였습니다.

struct STUDENT {
char *field;
char *value;
char *next;
};

필드엔 이름..모 이런게 들어가고..(어떤 필드가 더 나올지 모른다고 가
정) 벨류엔 그 값이 들어가려고요..
fgets로 파일에서 한줄 읽은 다음에 그 다음걸 linked list로 표현하려고
하는데 next값에 무엇이 들어가야 할런지 고민이 되네요. 배열 같은경우
다음번 배열인자가 들어가면 되지만 ..이런경우엔..ㅜ.ㅜ
그리고 어떤 함수 go(*address)와 go(**address)가 어떻게 다른지도 알고
싶습니다.
감사합니다.

익명 사용자의 이미지

whiteday. wrote..
어떤 파일에서 다음과 같은 데이타가 있다고 가정하고..
--------
학번 2000111111
이름 우리집
첫인상 안좋음
-------

-------라는 구분자가 나오기 전까지 이것을 field와 value로 구분하여
구조체로 설정하였습니다.

struct STUDENT {
char *field;
char *value;
char *next;
};

필드엔 이름..모 이런게 들어가고..(어떤 필드가 더 나올지 모른다고 가
정) 벨류엔 그 값이 들어가려고요..
fgets로 파일에서 한줄 읽은 다음에 그 다음걸 linked list로 표현하려 고
하는데 next값에 무엇이 들어가야 할런지 고민이 되네요. 배열 같은경 우
다음번 배열인자가 들어가면 되지만 ..이런경우엔..ㅜ.ㅜ

링크드 리스트를 표현한다면 스트럭쳐가 잘못되었네여..
struct STUDENT {
char *name;
char *value;
struct STUDENT *next;
}
이렇게 되겠지요.. 즉 next에는 다음 데이터 스트럭쳐의 주소값을
가르키게 되야 하지요.

그리고 어떤 함수 go(*address)와 go(**address)가 어떻게 다른지도 알 고
싶습니다.
감사합니다.

1차원 포인터와 2차원 포인터의 차이지여..
1차원 포인터는 데이터 시작점의 주소값을 가르키는거고..
2차원 포인터는 데이터 시작점의 주소가 있는 곳의 주소를 가르키는것입니
다. 좀더 상세한건 포인터 책을 참조하세요.

익명 사용자의 이미지

감사합니다..
제가 타이핑을 잘못했군요..

님께서 말씀하신데로..
struct STUDENT {
char *name;
char *value;
struct STUDENT *next;
}
라고 선언했을경우에...
*next에는 무엇이 할당되어야 하나요...다음 field의 주소를 가리켜야 된
다는건 알겠는데....그 주소를 어떻게 구하는지..알수가 읍떠서리..

익명 사용자의 이미지

다음 주소는 이렇게 하시면 되겟지요..
리스트를 전역으로 선언해 놨다면..
struct STUDENT *std;

struct STUDENT *next;
next = (struct STUDENT *)malloc(sizeof(struct STUDENT));

/* 데이터 입력 */
.
.
/* 데이터 입력 종료 */

next->next = std;
std = next;

이런 식으로 하면 됩니다..
이부분에 대해서는 포인터에 대해 자세히 책을 보시는게 좋을거 같네여.
이부분도 마찬가지 포인터와 관련된거입니다.

익명 사용자의 이미지

친절한 설명 감사합니다..
저도 님처럼 여기에 답변해줄 날을 기대하며....
좋은 하루 되세요..