1

C では、「初期化子要素が定数ではありません」というエラーを解決する 1 つの方法は、main() 関数内に strcuture を作成することです。しかし、構造体の配列があり、それをグローバル配列として使用したいとします。どうすればそれを作成して初期化できますか?

struct A *b = malloc(10*sizeof(struct A)); // Want to keep the malloc
void init_A_types(struct A* t)
{
  t->elm1=0; t->elm2=1;
}
...
int Main() {
  for (k=0;k<10;k++)
  init_A_types(b+k);
  ...
  return 0;
}
4

2 に答える 2

2

配列が必要な場合は、配列として宣言してみませんか?

struct A {
    const char *str;
    int n;
};

struct A b[3] = {
    {
        "foo", 1
    },
    {
        "bar", 2
    },
    {
        "baz", 3
    }
};

グローバル ポインターが必要な場合は、グローバル ポインターを使用します。

struct A *b;

int main()
{
    b = malloc(sizeof(*b) * 10);

    // do stuff

    free(b);
    return 0;
}
于 2013-02-10T15:04:33.803 に答える
2

プログラムでは、このステートメントstruct A *b = malloc(10*sizeof(struct A));を に変更することを検討できstruct A b[10];、プログラムの残りの部分は同じになる可能性があります。

于 2013-02-10T15:07:41.027 に答える