C 结构数组指针作为函数参数

C 结构数组指针作为函数参数,c,pointers,struct,C,Pointers,Struct,我有一个数据库结构来存储员工的信息 struct employeeData { char name[50]; int age; char rank[50]; char level[50]; char memo[100]; }; 在此之后,我声明了一个指针数组 struct employeeData *eData[MAX]; 在主要功能中 现在,我有一个函数,下面的函数 void newEmployee(struct employeeData *eData[M

我有一个数据库结构来存储员工的信息

struct employeeData
{
   char name[50];
   int age;
   char rank[50];
   char level[50];
   char memo[100];
 };
在此之后,我声明了一个指针数组

struct employeeData *eData[MAX];
在主要功能中

现在,我有一个函数,下面的函数

 void newEmployee(struct employeeData *eData[MAX])
    {
      prinf("name: ");
    
      scanf("%s", eData[Database] -> name);
    
      printf("%s", eData[Database] -> name);
    }
它编译时会有任何错误,当我运行它时,我会输入员工的姓名,但t会立即给我一个分段错误

我的问题是什么


我认为我在newEmployee函数中正确使用了指针结构。

我修复了您问题中的3个语法错误。这个问题并不是独立的,所以我们只能猜测你做错了什么——你没有向我们展示的代码
scanf()
不安全,因此改用
fgets()
@PaulOgilvie可能正确地猜测到,您没有为这些指针指向的结构分配内存

下面是一个独立的示例,它可能使用@ImanH提出的想法解决了这个问题:

#include <stdio.h>
#include <string.h>

struct employeeData {
    char name[50];
    int age;
    char rank[50];
    char level[50];
    char memo[100];
};

void newEmployee(size_t n, struct employeeData eData[n]) {
    for(int i = 0; i < n; i++) {
        printf("name: ");
        fgets(eData[i].name, sizeof(((struct employeeData *) 0)->name), stdin);     
        printf("%s", eData[i].name);
    }
}

int main() {
    struct employeeData e[2];
    newEmployee(sizeof(e) / sizeof(*e), e);
    return 0;
}
#包括
#包括
结构雇员数据{
字符名[50];
智力年龄;
字符秩[50];
字符级别[50];
字符备忘录[100];
};
void newEmployee(大小n,结构employeeData-eData[n]){
对于(int i=0;iname),stdin;
printf(“%s”,eData[i].名称);
}
}
int main(){
结构雇员数据[2];
新员工(sizeof(e)/sizeof(*e),e);
返回0;
}
如果要使用指针数组,可以执行以下操作:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct employeeData {
    char name[50];
    int age;
    char rank[50];
    char level[50];
    char memo[100];
};

void newEmployee(size_t n, struct employeeData *eData[n]) {
    for(int i = 0; i < n; i++) {
        eData[i] = malloc(sizeof(struct employeeData));
        if(!eData[i]) {
            printf("malloc failed\n");
            exit(1);
        }
        printf("name: ");
        fgets(eData[i]->name, sizeof(((struct employeeData *) 0)->name), stdin);
        printf("%s", eData[i]->name);
    }
}

int main() {
    struct employeeData *e[2] = {0};
    newEmployee(sizeof(e) / sizeof(*e), e);
    free(e[0]);
    free(e[1]);
return 0;
}
#包括
#包括
#包括
结构雇员数据{
字符名[50];
智力年龄;
字符秩[50];
字符级别[50];
字符备忘录[100];
};
void newEmployee(大小n,结构employeeData*eData[n]){
对于(int i=0;iname,sizeof(((struct employeeData*)0)->name),stdin;
printf(“%s”,eData[i]->名称);
}
}
int main(){
结构employeeData*e[2]={0};
新员工(sizeof(e)/sizeof(*e),e);
自由(e[0]);
自由(e[1]);
返回0;
}

您发布的代码将无法编译:函数的参数缺少类型规范。假设这是指向某个结构的指针,则需要
struct employeeData*eData
作为参数列表。还有,为什么要有一个指针数组?在使用之前,需要分配每一个(使用
malloc
);最好有一个结构数组。你是对的。对不起,我错过了那部分。关于使用malloc,最好有一个结构数组?我不确定在哪里初始化它。您应该定义数组:struct employeeData eData[MAX];并将其作为指针传递:void newEmployee(Struct employeeData*eData)
Struct employeeData*eData[MAX]
是一个指针,但没有分配给它的内存。请发布一个yes,我注意到scanf给了我一些错误。因此,我将其更改为fgets并删除了字符串的最后一个字符。我设法学会了在这种情况下使用malloc。谢谢,如果你们都准备好了,请接受答案。对有帮助的答案投赞成票。我投了赞成票!谢谢你的帮助,我在哪里可以接受答案?