언어 자료구조 알고리즘/디딤돌 C언어

[C언어] 91. 동적 배열 사용 예 - 동적 개체 정의

언제나휴일 2016. 4. 18. 08:00
반응형



동적 배열 사용 예 - 동적 개체 정의



테스트를 위해 사용할 자료는 회원 번호와 이름을 멤버로 갖는 회원 데이터로 할게요.
typedef struct _Member Member;
#define MAX_NAME_LEN 20
struct _Member
{
   
int mnum;
   
char name[MAX_NAME_LEN+1];
};
 
그리고 동적으로 생성하는 함수, 소멸하는 함수, 출력하는 함수를 제공하세요.  
Member.h
#pragma once
typedef struct _Member Member;
#define MAX_NAME_LEN 20
struct _Member
{
   
int mnum;
   
char name[MAX_NAME_LEN+1];
};
Member *NewMember(
int mnum,const char *name);
void DeleteMember(Member *member);
int MemberGetNum(Member *member);
const char *MemberGetName(Member *member);
void MemberView(Member *member);
 
회원 데이터를 동적으로 생성하는 함수에서는 먼저 동적으로 Member 형식 크기의 메모리를 할당받아야겠죠.
그리고 동적으로 생성한 Member 메모리의 멤버의 초기값을 입력 인자로 전달받은 값으로 설정하세요.
void MemberMember(Member *member,int mnum,const char *name);
Member *NewMember(
int mnum,const char *name)
{
    Member *member = 0;
    member = (Member *)malloc(
sizeof(Member));
    MemberMember(member,mnum,name);
   
return member;
}
void MemberMember(Member *member,int mnum,const char *name)
{
    member->mnum = mnum;
    memset(member->name,0,
sizeof(member->name));
    strncpy(member->name,name,MAX_NAME_LEN);
}
 
동적으로 생성한 회원 데이터를 소멸하는 함수에서는 자신의 메모리를 해제하세요.
void DeleteMember(Member *member)
{
    free(member);
}
 
그리고 회원 데이터를 콘솔 화면에 출력하는 함수도 제공하세요.
void MemberView(Member *member)
{
    printf(
"번호:%d 이름:%s\n",member->mnum,member->name);
}


   
Member.c
#include "Member.h"
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
void MemberMember(Member *member,int mnum,const char *name);
Member *NewMember(
int mnum,const char *name)
{
    Member *member = 0;
    member = (Member *)malloc(
sizeof(Member));
    MemberMember(member,mnum,name);
   
return member;
}
void MemberMember(Member *member,int mnum,const char *name)
{
    member->mnum = mnum;
    memset(member->name,0,
sizeof(member->name));
    strncpy(member->name,name,MAX_NAME_LEN);
}
void DeleteMember(Member *member)
{
    free(member);
}
void MemberView(Member *member)
{
    printf(
"번호:%d 이름:%s\n",member->mnum,member->name);
}

반응형