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

タグ付けされた へのポインターを宣言する場合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 に答える