동적할당과 구조체로 간단한 주소록을 만들려고 합니다. 단, 구조체 배열을 선언하지 말 것.
입력한 사람의 수 만큼 정보를 저장.
이 때, 몇명의 정보를 저장하는지 모르기 때문에 malloc함수를 이용하여 동적할당을 받는다.
동적할당 malloc은 보이드포인트형으로 반환하기 때문에 강제로 (int *)변환하고, 이를 int* count변수에 저장.
만약 3명의 정보를 입력받는다고 하면 heap영역에
3*4 byte의 메모리를 할당받고, 이 주소를 포인터 변수 i가 가리키게 되죠..
for문으로 루프를 돌면서 입력받은 수 만큼 정보를 저장하려고 하는데, 구조체 배열을 선언할 수 없다는 조건 때문에
1명 이상의 정보를 저장할 수가 없어요. 이를 malloc으로 반환한 count변수랑 같이 써볼려고 하는데, 도무지 개념이 안잡히네요..
#include <stdio.h>
struct Bank // 사람들의 정보를 가지고 있는 구조체.
{
char PhoneNumber[20]; // 전화번호
char Name[20]; // 이름.. 배열의 길이를 20으로 여유있게 잡았습니다. 이것도 맞는지 모르겠네요..
};
int main()
{
struct Bank Mokrok; //Bank 구조체의 변수로 Mokrok을 선언합니다.
int* count;
int input;
int i;
scanf("%d", &input); // 몇명의 정보를 저장할 것인지 입력받고,
count = (int* )malloc(input*sizeof(int)); // int* count 변수에 이를 저장합니다.
for(i=0; i<input; i++)
{
scanf("%s %s", &Mokrok.Name, &Mokrok.PhoneNumber);
}
// 이 for반복문은 Mokrok 구조체의 멤버에 정보를 저장합니다. 하지만 배열이 아니라 한명의 정보밖에 입력이 안되네요.
printf("%s %s", Mokrok[1].Name, Mokrok[1].PhoneNumber); // 그 결과입니다. 컴파일이 안되네요.
}
입력할 사람의 수를 뭣하러 동적할당함?
이렇게 하라고 하더라구요.. 문제조건이..ㅠ.ㅠ
#include <stdlib.h>
나머진몰겠고 그게 조건전부면 구조체에있는 배열 크게잡고다때려너어