2013-10-01 23 views
1

我所试图做的就是创建结构的数组,并通过函数初始化但是我得到了一些错误,阵列由函数初始化结构的

lab2.c:20:2: error: declaration of anonymous struct must be a definition 
    struct *person users[] = userInput(); 
    ^
lab2.c:20:2: warning: declaration does not declare anything[-Wmissing-declarations] 
    struct *person users[] = userInput(); 
    ^~~~~~ 
lab2.c:24:1: error: declaration of anonymous struct must be a definition 
    struct * userInput() { 
    ^
lab2.c:48:2: error: expected identifier or '(' 
    } 
    ^
1 warning and 3 errors generated. 

下面是我的代码,在冷凝版本,如果需要更多,请告诉我,我对C很新,所以我猜这是我的一个明显的错误。

int main() { 
    struct person users = userInput(); 
    return 0; 
} 

struct * userInput() { 
    struct person users[30]; 
    ...do stuff to struct here... 
    return *users; 
} 
+0

用户是一个结构。 userInput返回一个struct *。 –

+1

您的退货类型无效。 'struct *'不是数据类型。 –

回答

3

当声明一个指针指向一个标记struct,星号跟随标签,而不是关键字struct。要声明一个动态分配的数组,使用星号方括号:

struct person *users = userInput(); 

返回一个指针指向一个局部变量是未定义的行为:

struct person users[30]; 
// This is wrong 
return *users; 

使用动态分配的存储器来代替:

struct person *users = malloc(sizeof(struct user) * 30); 

完成数据后,您需要在调用者中使用free

1

好的,你的代码有很多错误。在执行类似操作时忽略语法上的内容:

struct person users[30] 

该函数返回时,该内存是临时的并且释放。最有可能给你一个分段错误或损坏的数据。你需要这样的东西:

#include <stdlib.h> 

typedef struct { char name[30]; int age; char gender; } person; 

person* userInput(); 

int main() { 
    person* users = userInput(); 
    return 0; 
} 

person* userInput() { 
    person* users = malloc(30 * sizeof(person)); 
    /* Init stuff here */ 
    return users; 
}