gpt4 book ai didi

使用结构的 C 函数,为什么它不起作用?

转载 作者:太空宇宙 更新时间:2023-11-04 06:32:01 24 4
gpt4 key购买 nike

我在这个实现中遇到了很多错误。

typedef struct EmployeeStruct
{
char lastName[MAX_LENGTH];
char firstName[MAX_LENGTH];
int employeeNumber; // Holds the employee's ID. This value is
// equal to the number of employees
struct EmployeeStruct *Next; // Pointer to the next most recently hired Employee
}Employee;

当尝试创建一个将返回指向该结构的指针的函数时,问题就来了。该错误出现在 malloc 调用中,导致“new”未被正确声明,因此此函数中的所有行都存在错误。

Employee* hireEmployee(Employee tail, char lastName[MAX_LENGTH], char firstName[MAX_LENGTH])
{
struct Employee *new = (Employee*)malloc(sizeof(Employee));
new.lastName = lastName;
new.firstName = firstName;
new.next = tail;
tail.next = new;
new.employeeNumber = employeeCount;

return tail;
}

这是错误列表。感谢您的帮助!

lab6.c:19: warning: initialization from incompatible pointer type
lab6.c:20: error: request for member ‘lastName’ in something not a structure or union
lab6.c:21: error: request for member ‘firstName’ in something not a structure or union
lab6.c:22: error: request for member ‘next’ in something not a structure or union
lab6.c:23: error: ‘Employee’ has no member named ‘next’
lab6.c:24: error: request for member ‘employeeNumber’ in something not a structure or union
lab6.c:26: error: incompatible types in return

最佳答案

这里有几个不同的问题:

您需要使用指针取消引用运算符 -> 来访问指向您的结构的指针的成员。
然后你需要使用strcpy分配给您的 char 数组。
你需要避免链表中的循环(你设置了 newtail 以作为 next 指向彼此) .显而易见的解决方法是将 new 设置为新的 tail。调用代码可能需要更新以反射(reflect)这一点。
最后,你不应该从 malloc 中转换返回值
真的最后,next应该是Next。或者您可以更改结构定义中的大小写。

Employee *new = malloc(sizeof(Employee));
strcpy(new->lastName, lastName);
strcpy(new->firstName, firstName);
new->Next = NULL;
tail->Next = new;
new->employeeNumber = employeeCount;

关于使用结构的 C 函数,为什么它不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19599704/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com