1

我在这里定义了一个结构

typedef struct {
char name[10];
int idBadge;
} Employee;

我想使用这个函数调用填充这个结构的一个实例:

void EmployeeCall (char *name, int badgeNumber, Employee *E){
    E = (Employee *)malloc(sizeof(Employee));
    strcpy(E->name,name);
    E->idBadge = badgeNumber;
}

然后,我想使用这样的调用来检索给定的信息:

int EmployeeBadge (Employee E){
    return(E.idBadge);
}

我从我的 Main bellow 中调用这些函数:

int main(void){
    Employee a;
    int badgeNumber;

    int badgeNumberA = 1028;
    char *namePtrA = "Fred";

    EmployeeCall( namePtrA, badgeNumberA, &a );

    badgeNumber = EmployeeBadge(a);
    printf("%d\n",badgeNumber);

    return 0;
}

当我调用它们时,它们都可以正确编译,但是 EmployeeBadge 的返回值不正确。它返回 int,就好像没有任何东西放入结构中一样;徽章编号 = 32767

如何创建一个可以通过值和引用传递的结构变量?我是否需要另一个 Employee 变量作为指针并将 Employee a 分配给它以用于 EmployeeCall 函数?

4

3 回答 3

4

你的代码不应该需要分配一个新的员工,改变你EmployeeCall

void EmployeeCall (char *name, int badgeNumber, Employee *E){

    strcpy(E->name,name);
    E->idBadge = badgeNumber;
}
于 2013-09-24T15:42:18.237 回答
2

您的 main 函数已经为 Employee 保留了内存,并且指针“E”将保持在函数的本地。您可以简单地省略malloc;

另一种解决方案是将指针传递给指针并让 CallEmployee 填充:

main()
{
        Employee *e;
        EmployeeCall( ..., &e);
}

void EmployeeCall (char *name, int badgeNumber, Employee **E)
{
   *E = malloc(sizeof(Employee));  // No cast needed
}
于 2013-09-24T15:44:17.683 回答
1

或许这

E = (Employee *)malloc(sizeof(Student));

应该

E = (Employee *)malloc(sizeof(Employee));

但是,由于您在这里传递了员工:

EmployeeCall( namePtrA, badgeNumberA, &a ); // &a is the employee

您只是想删除对 malloc 的调用:

// don't need this E = (Employee *)malloc(sizeof(Student));
于 2013-09-24T15:40:58.980 回答