#ifndef __NAME_CARD_H__
#define __NAME_CARD_H__
#define NAME_LEN 30
#define PHONE_LEN 30
typedef struct __namecard
{
char name[NAME_LEN];
char phone[PHONE_LEN];
} NameCard;
// NameCard 구조체 변수의 동적 할당 및 초기화 후 주소 값 반환
NameCard * MakeNameCard(char * name, char * phone);
// NameCard 구조체 변수의 정보 출력
void ShowNameCardInfo(NameCard * pcard);
// 이름이 같으면 0, 다르면 0이 아닌 값 반환
int NameCompare(NameCard * pcard, char * name);
// 전화번호 정보를 변경
void ChangePhoneNum(NameCard * pcard, char * phone);
#endif
만들어야 하는 파일의 헤더다.
#include <stdio.h>
#include <stdlib.h>
#include "my_NameCard.h"
NameCard* MakeNameCard(char* name, char* phone) // NameCard 구조체 변수의 동적 할당 및 초기화 후 주소 값 반환
{
NameCard* PtemName;
(NameCard*)PtemName = (NameCard*)malloc((sizeof(char) * NAME_LEN) + (sizeof(char) * PHONE_LEN));
if (PtemName == NULL)
{
printf("MemAollc Failed");
exit(1);
}
for (int i = 0; i < NAME_LEN; i++)
{
PtemName->name[i] = name[i];
}
for (int i = 0; i < PHONE_LEN; i++)
{
PtemName->phone[i] = phone[i];
}
return PtemName;
}
void ShowNameCardInfo(NameCard* pcard) // NameCard 구조체 변수의 정보 출력
{
fputs(pcard->name, stdout);
printf("\\n");
fputs(pcard->phone, stdout);
printf("\\n\\n");
}
int NameCompare(NameCard* pcard, char* name)// 이름이 같으면 0, 다르면 0이 아닌 값 반환
{
for(int i = 0; i < NAME_LEN; i++)
{
if (pcard->name[i] != name[i])
return 1;
}
return 0;
}
void ChangePhoneNum(NameCard* pcard, char* phone)// 전화번호 정보를 변경
{
for (int i = 0; i < PHONE_LEN; i++)
{
pcard->phone[i] = phone[i];
}
}
해결했다.
의아했던건…
main.c에서 저부분을 실행하려고 하면 계속 오류가 났었음.
내 생각대로라면 잘못한게 없는데… 뭘 잘못할만큼 my_NameCard.c
가 어려운 구조도 아니다.
가능한 경우는
하나하나 찾아보니 1과 2모두 문제였다.
문제는 강의에서 제공한 답지가 틀렸다는 것임.
저번 강의에서
LData LRemove(List* plist)
{
int rpos = plist->curPosition;
int num = plist->numOfData;
int i;
LData rdata = plist->arr[rpos]; // 삭제할 데이터 임시저장
**for (i = rpos; i < num-1; i++)**
{
plist->arr[i] = plist->arr[i + 1];
(plist->numOfData)--;
(plist->curPosition)--;
return rdata; // 삭제된 데이터 반환
}
}
볼드처리한 부분을 보자. 저게 왜 문제냐면
지금처럼 num = 3
이고, rpos=2
인경우에는
2번째 인덱스를 삭제하고, 3번째 인덱스를 2번째 인덱스 자리에 넣어야 하는데 조건에 맞지 않아서 애초에 for문에 진입하지 않는다.