strcmp함수 사용 관련,동적영역메모리접근관련 질문..이요.
민서
strcmp함수 사용 관련,동적영역메모리접근관련 질문..이요.
이전 글에도 올렸구 ; 같은 코드 내용이긴합니다만.
win32에서 사용자로부터 name,T_num에 대한 입력,검색, 삭제, 전부 보여주기 등 기능들을 하는 코드 인데요.
여기서 검색부분, search();함수가 이상하네요. 실행시에 3번을 눌러 이 함수를 부를떄에만 에러가 뜨네요,..;
그래서 search함수에
for(i=0;irootsize;i++)
{
if(0==strcmp(parr,root[i]-name))
printf(찾고자하는 파일: %s[이름] %s[넘버],root[i]-name,root[i]-T_num);
}
이것을
for(i=0;irootsize;i++)
{
if(0==strcmp(parr,root[i]-name)){
printf(찾고자하는 파일: %s[이름] %s[넘버],root[i]-name,root[i]-T_num);
break;
}
}
이라고 하니까 되더군요..
왜 위의 코드로 하면 오류가 나는 걸까요? // 삭제 함수도 위와 같은 증상을 보이더군요.
질문 내용 :
#include stdio.h
#include stdlib.h
#include string.h
#include conio.h
struct data{
char name[10];
char T_num[10];
//struct data** pmem;
};
typedef struct data MEM;
MEM** root;
int rootsize=5,index=0;
void insert(void);
void delet(void);
void search(void);
void print(void);
void extensize(void);
int main(void)
{
//MEM man1;
int sw,n=0,i=0;
//char bname[10],bT_num[10];
root=(MEM**)malloc(rootsize*sizeof(MEM));
for(i=0;irootsize;i++)
root[i]=NULL;
while(1){
printf(---------Menu---------\n);
printf( 1.Insert\n);
printf( 2.Delete\n);
printf( 3.Search\n);
printf( 4.Print All\n);
printf( 5.Exit\n);
printf(Choose the item:);
scanf(%d,&sw);
switch(sw)
{
case 1:
insert();
break;
case 2:
delet();
break;
case 3:
search();
break;
case 4:
print();
break;
case 5:
n++;
break;
}
if(n!=0)
break;
}
free(root);
while(!kbhit());
return 0;
}
void insert(void){
int i;
char pname[10];
char pT_num[10];
MEM* temp;
temp=(MEM*)malloc(sizeof(MEM));
printf(Input name);
scanf(%s,pname);
printf(Input Tel number:);
scanf(%s,pT_num);
strcpy(temp-name,pname);BRame);
strcpy(temp-T_num,pT_num);
for(i=0;irootsize;i++)
{
if(root[i]==NULL)
{ root[i]=temp;
break;
}
}
index++;
if(rootsize==(index+1))
extensize();
}
void extensize(void)
{
int exSize=rootsize+3;
MEM **Rtemp=(MEM**)malloc(sizeof(MEM)*exSize);
int i;
for(i=0;iexSize;i++)
Rtemp[i]=NULL;
for(i=0;irootsize;i++)
Rtemp[i]=root[i];
//free(root);
root=Rtemp;
rootsize+=3;
}
void delet(void)
{ int i;
char parr[10];
printf(지울 파일의 이름을 입력하시오:);
scanf(%s,parr);
for(i=0;irootsize;i++)
{
if(0==strcmp(parr,root[i]-name))
root[i]=NULL;
}
}
void search(void)
{
int i;
char parr[10];
printf(찾을 파일의 이름을 입력하시오:);
scanf(%s,parr);
for(i=0;irootsize;i++)
{
if(0==strcmp(parr,root[i]-name))
printf(찾고자하는 파일: %s[이름] %s[넘버],root[i]-name,root[i]-T_num);
}
}
void print(void){
int i;
for(i=0;irootsize;i++)
{
if(root[i]!=NULL)
printf(입력된 값 %d번쨰:%s[이름],%s[넘버]\n,i,root[i]-name,root[i]- T_num);
}
}
-
큰마루 2024-04-26
malloc 함수로 메모리를 할당을 받으면
delet 함수에서 지울 경우에 free로 메모리를 돌려줘야 됩니다.
반복문에서 에러가 나는 경우는
for(i=0;irootsize;i++)
{
if ((root[i] != NULL) && (0==strcmp(parr,root[i]-name)))
printf(\찾고자하는 파일: %s[이름] %s[넘버]\