因此,我正在尝试将 malloc 添加到我创建的电话簿应用程序中,但是由于我对 C 有点陌生,我不确定我所做的是否正确。我遇到了一个小问题,但我已经阅读了我拥有的初学者书籍,它并没有像我想要的那样详细,我无法通过搜索谷歌来判断我是否只是我设置 malloc 的方式完全错误,或者我错过了其他东西。
基本上我的结构中有 4 个数组,First_Name
, Last_name
, home
, cell
. 其中每一个都有 2 个功能,一个从用户那里获取信息的功能,一个打印用户信息并将其添加到电话簿的功能。我现在得到的是原始代码的一小部分,它只将名字添加到电话簿(所以它不是整个代码),并且在每个获取用户输入的函数中,我想添加 malloc 函数。现在我只设置了名字和第一个malloc,但我遇到的问题是当我去检查电话簿看名字是否输入成功时,程序退出了。如果我取出 malloc,它会成功运行。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <conio.h>
#define BUFFER 50
//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;
int counter = 0;
int i = 0;
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)Showphonebook\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)
{
// THE MALLOC FUNCTION!
friends = (fr *) malloc(BUFFER * sizeof(fr));
printf("Enter a first name \n");
scanf("%s", friends[*counter].First_Name);
if (friends != NULL) {
free(friends);
}
}
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);
}
}
希望给可以在这里帮助我的人打一个大大的绿色复选标记。