C 函数返回结构时出错

C 函数返回结构时出错,c,struct,structure,C,Struct,Structure,这就是我想做的: 我一直在编写代码,我已经创建了一个结构(在main中硬编码),然后我想为两个结构分配malloc空间(尝试使用函数)。然后将第一个结构中的所有数据复制到第二个结构并打印新结构 发生的错误是: 我不明白这个错误是什么意思 pointer.c:7: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘*’ token pointer.c:13: error: expected ‘=’, ‘,’, ‘;’,

这就是我想做的:

我一直在编写代码,我已经创建了一个结构(在main中硬编码),然后我想为两个结构分配malloc空间(尝试使用函数)。然后将第一个结构中的所有数据复制到第二个结构并打印新结构

发生的错误是: 我不明白这个错误是什么意思

pointer.c:7: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘*’ token
pointer.c:13: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘*’ token



#include <stdio.h>
#include <stdlib.h>
#include "pointer.h"
int rec = 0;
第13行

struct emp *copy(emp *data, int record){
emp *new_employee = create(record+1);
int i;
for(i = 0; i<record;i++){
    new_employee.first = data.first;
    new_employee.last = data.last;
    new_employee.start_date = data.start_date;
    new_employess.sal = data.sal;
    data++;
}
return new_employee;
}


int main(void){
struct info employees;
employees.first = "FIRST";
employees.last = "LAST";
employees.start_date = "June-20th-2006";
employees.sal = 55555.55;
rec = rec+1;



}
struct emp*复制(emp*数据,int记录){
emp*新员工=创建(记录+1);
int i;

for(i=0;i
info
不是一个类型,
emp
只是
struct info
类型的变量。添加一个typedef(如果希望
emp
作为一个类型):

…或添加一个
struct
关键字

struct info *create(int record);
struct info *copy(emp *data, int record);

emp
是一个变量,
info
是类型。因此,在函数和主体的原型中,应该使用
info
而不是
emp

正如其他人所说,缺少了
typedef
,或者缺少了
struct info
而不是
emp
。我错过了那一个:)

我想这是代码中两个截然不同的错误

emp *new_employees = malloc(sizeof(info) * (record+1));
类型的名称是
struct info
,而不是
info

但更好的写作方式是:


emp*new_employees=malloc((记录+1)*sizeof*emp);

您必须定义如下函数:

struct emp *create()
struct emp *copy()

或者使用typedef将结构定义为数据类型。

是的,但是
info
是类型,而不是
emp
@LudovicKuty是的,把它弄糊涂了。我更新了答案,但它不会显示为编辑状态……你是说在定义函数时我应该在头文件中定义它。它们必须返回一个struct emp,而不是清空另一个post a重申,如果按照你发布的内容做,我应该构造info*new_employees=malloc(sizeof(info)*(record+1));@jengle:
sizeof(info)
只有在您将
info
声明为typedef时才起作用。如果您愿意,您可以这样做,或者您可以通过其原始名称
struct info
引用该类型。但是
sizeof*emp
更健壮;它不会意外使用错误的类型名称,并且在以后更改类型时不需要更改f
emp
struct info *create(int record);
struct info *copy(emp *data, int record);
emp *new_employees = malloc(sizeof(info) * (record+1));
struct emp *create()
struct emp *copy()