파일을 읽고 쓸 수있는 기능을 제공하려는 전화 번호부 응용 프로그램이 있습니다. 파일을 작성하는 방법을 아주 쉽게 알아 냈습니다. 그러나 그것들을 읽으면 정말로 저를 붙잡 았습니다. 내 주요 문제는 파일을 루프를 얻을 수 없다는 것입니다 (일반적으로 루프를 치는 즉시 충돌). 나의 밑에있는 기능은 다음과 같습니다.파일에서 데이터를 가져 오는 중에 크래시가 발생했습니다.
다음은 구조, 주 및 메뉴 기능입니다.
typedef struct friends_contact{
char *First_Name;
char *Last_Name;
char *home;
char *cell;
}fr;
int main() {
fr friends[5];
char buffer[BUFFSIZE];
int counter=0;
int i=0;
menu(friends, &counter,i,buffer);
getch();
return 0;
}
//Menu function
void menu(fr*friends,int* counter, int i,char buffer[]) {
int user_entry=0;
int user_entry2=0;
char user_entry3[50]={'\0'};
printf("Welcome! Would you like to import a file? (1)Yes or (2) No");
scanf("%d",&user_entry);
if(user_entry==1)
{
file2(friends,counter,i,user_entry3);
}else;
do{
int result;
printf("\nPhone Book Application\n");
printf("1) Add friend\n2) Delete friend\n3) Show a friend\n4) Show phonebook\n5)Exit\n");
scanf("%d", &user_entry);
if(user_entry==1)
{
add_contact(friends,counter,i,buffer);
}
if(user_entry==2)
{
delete_contact(friends ,counter,i);
}
if(user_entry==3)
{
result=show_contact(friends ,counter,i);
if(result==0){
printf("\nName not Found\n");
}else{
result;
}
}
if(user_entry==4)
{
print_contact(friends, counter,i,user_entry3);
file2(friends ,counter,i,user_entry3);
}
}while(user_entry!=5);
if(user_entry==5)
{
printf("Would you like to save entries to a file? (1)yes or (2) no");
scanf("%d",&user_entry2);
if(user_entry2 == 1)
{
printf("Please name your file");
scanf("%s",user_entry3);
file(friends, counter,i,user_entry3);
printf("Goodbye!");
}else if(user_entry2 == 2){
printf("Goodbye!");
}
}
}
다음은 파일 읽기를 처리하는 기능입니다. 그래서이 진행중인 작품이다
void file2(fr*friends ,int* counter, int i, char user_entry3[50])
{
FILE *read;
printf("Please enter a file name");
scanf("%s",user_entry3);
read=fopen(user_entry3,"r");
//This is where the crash is taking place!!**
while(!feof(read)){
fscanf(read,"%s %s %s %s",friends[i].First_Name,friends[i].Last_Name,friends[i].home,friends[i].cell);
printf("\n""%s ""%s ""\n""<Home>""%s""\n""<Cell>""%s""\n",friends[i].First_Name,friends[i].Last_Name,friends[i].home,friends[i].cell);
}
지금 내가 부탁 해요 무슨 관련이없는 프로그램에 다른 문제가있을 수 있습니다 이해하지만, 나는 C에 새로운 오전. 나는 충돌로부터 이것을 멈출 수있는 방법을 알아야하고 나머지 연락처 (이것은 내가 생각할지도 모른다고 생각한다)에이를 추가하는 방법을 알아야한다. 그것은 나를 미치게 만든다! 미리 감사드립니다.
전에 내가 말했듯이 전화 번호부 앱 이었으므로 분명히이 세 가지 기능 만 있습니다. 나는 사용자에게 연락처를 입력 할 수있는 곳이 있으며, 이렇게하는 동안 나는'malloc'과'free'를 사용합니다. 당신의 말은 데이터를 읽을 때'malloc'과'free'를 추가해야합니다. – DatDudeJC
만약 당신이 메모리를 할당하지 않는다면, 그 포인터는 정의되지 않은 메모리 영역을 가리키고 있습니다. 그렇기 때문에, 그 멤버들로 데이터를 읽으려면, 우선 그 메모리를 할당해야합니다. 그 안에있는 데이터를 읽고 그것을 인쇄하고 다시 해방하십시오. 하지만 당신은 구조체에 미리 정의 된 길이의 문자열을 사용하는 것을 고려해 볼 수 있습니다. 그것은 당신에게 많은 문제와 메모리 누출을 저장합니다;) –
메모리 누수가 이상한 무한 루프를 유발할 수 있습니까? 나는 그것이 파일을 읽고 연락처 목록에 추가하는 작업을하지만 연락처 목록을보고 목록을 다시 보려고하면 무한 루프가됩니다. – DatDudeJC