ユーザーが友達の情報を入力するとき、割り当てられた適切なスペースへのポインターと、この割り当てられたスペースに友達の情報を格納する必要があります。scanfの引数としてバッファ配列を使用することに言及している他の場所のスニッピッツを読んだことがありますが、これをすべてまとめているだけです。これが私がこれまでに持っているものです。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <conio.h>
//Structure for contacts
typedef struct friends_contact{
char *First_Name;
char *Last_Name;
char *home;
char *cell;
}fr;
void menu(fr*friends ,int* counter,int user_entry,int i);
void setFirst(fr*,int *,int i);
char getFirst(fr*,int i);
void add_contact(fr*friends,int* counter,int i);
void print_contact(fr*friends ,int* counter, int i);
int main()
{
int user_entry=0;
fr friends[5];
int buffer[50];
int counter=0;
int i=0;
for(i=0;i<5;i++)
{
friends[i].First_Name = (char*) malloc(sizeof(char) * 64);
free(friends[i].First_Name);
}
menu(friends, &counter,user_entry,i);
getch();
return 0;
}
//Menu function
void menu(fr*friends,int* counter,int user_entry, int i)
{
do{
int result;
printf("\nPhone Book Application\n");
printf("1) Add friend\n2) Delete friend\n3) Show a friend\n4)"
"Showonebook\n5)Exit\n");
scanf("%d", &user_entry);
if(user_entry==1)
{
add_contact(friends,counter,i);
}
if(user_entry==2)
{
}
if(user_entry==3)
{
}
if(user_entry==4)
{
print_contact(friends, counter,i);
}
}while(user_entry!=5);
}
void setFirst(fr*friends, int* counter, int i)
{
//malloc issue **
friends=(fr*) malloc(sizeof(fr));
printf("Enter a first name \n");
scanf("%s",friends[*counter].First_Name);
}
char getFirst(fr*friends , int pos)
{
printf("%s ", friends[pos].First_Name);
return *friends[pos].First_Name;
}
void add_contact(fr*friends,int* counter,int i)
{
setFirst(friends,counter,i);
(*counter)++;
}
void print_contact(fr*friends ,int* counter, int i)
{
for( i = 0; i < *counter; i++)
if (strlen(friends[i].First_Name))
{
getFirst(friends, i);
}
}
これは明らかにコードの一部にすぎず、現在のところ、名前の追加関数に名前を入力した後、セグメンテーション違反が発生します。終了する前に、最後にもう一度メニューにループします。私はどこかで間違っていることに気づきました、そして私はこれを緩衝液で修正しようと思います。解決策はありますか?