【发布时间】:2022-01-07 13:31:13
【问题描述】:
我在尝试创建结构的自引用列表时遇到了许多问题。我目前正在收到一条非法的硬件指令,我所知道的是,它是在我的打印语句之后的打印语句之后的东西。谁能帮助指出我需要做些什么才能使我的实施正确?谢谢。
我的添加功能
Employee *employeeListHead = NULL;;
int nodeCount = 0;
void addEmployee(void)
{
char *name = (char*) malloc(MAX_NAME_LENGTH*sizeof(char));
char gender;
int age;
char *title = (char*) malloc(MAX_JOB_LENGTH*sizeof(char));;
printf("Enter name: \n");
scanf(" %100s", name);
scanf("%*[^\n]%*c");
printf("Enter gender: \n");
scanf(" %1c", &gender);
scanf("%*[^\n]%*c");
printf("Enter age: \n");
scanf(" %d", &age);
scanf("%*[^\n]%*c");
printf("Enter job title: \n");
scanf(" %100s", title);
scanf("%*[^\n]%*c");
printf("The employee you've entered is: %s %c %d %s \n", name, gender, age, title);
Employee *newEmp = (Employee*)malloc(sizeof(Employee));
strcpy(newEmp->name, name);
strcpy(newEmp->gender, &gender);
newEmp->age = age;
strcpy(newEmp->profession, title);
newEmp->next = NULL;
if(employeeListHead == NULL)
{
employeeListHead = newEmp;
nodeCount++;
}
else
{
Employee *temp = (Employee*)malloc(sizeof(Employee));
temp = employeeListHead;
while(temp->next != NULL){
temp = temp->next;
}
temp->next = newEmp;
nodeCount++;
free(temp);
}
}
结构
typedef struct Employee{
char name[MAX_NAME_LENGTH];
char gender[2];
int age;
char profession[MAX_JOB_LENGTH];
struct Employee *next;
} Employee;
【问题讨论】:
-
您能在 Employee 结构中添加吗?
-
欢迎来到 Stack Overflow。请使用tour 并阅读How to Ask。具体来说。寻求调试帮助的问题必须提供完整的minimal reproducible example。也就是说,任何人都可以完全按照所示重现问题的最少完整代码量。
-
strcpy(newEmp->gender, &gender);是错误的,因为gender是单个字符而不是字符串。执行newEmp->gender = gender,假设gender字段是char(您没有显示)。 -
好的,既然您已经添加了
struct定义,我们可以说正确的代码是newEmp->gender[0] = gender; newEmp->gender[1] = '\0';或者将gender作为字符串而不是单个字符读取,然后您可以使用strcpy。或者更好的是,直接读入newEmp字段 - 没有意义读入 tmp 变量然后复制。 -
Employee *temp = (Employee*)malloc(sizeof(Employee)); temp = employeeListHead;是内存泄漏。然后你free(temp);但这是列表中的倒数第二个节点,因为循环。只需执行Employee *temp = employeeListHead;并消除malloc和free。
标签: c data-structures struct linked-list