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;
}
4

2 回答 2

2

声明指向 tagged 的​​指针时struct,星号跟在标记后面,而不是关键字后面struct。要声明动态分配的数组,请使用不带方括号的星号:

struct person *users = userInput();

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

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

改为使用动态分配的内存:

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

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

于 2013-10-01T02:35:34.620 回答
0

好的,您的代码有很多问题。当您执行以下操作时忽略语法内容:

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;
}
于 2013-10-01T02:41:14.400 回答