инициализировать массив struct в c - PullRequest
0 голосов
/ 03 марта 2020

Можно ли инициализировать stuct в C следующим образом:

struct database {
  char* Name;
  char* Title;
  char* DOB;
  int EmployeeNo;
} people[100];

people[0] = { "Jon", "Manager", "1-1-1990", 12345 };
people[1] = { "Bob", "Accountant", "1-1-1990", 54321 };

Я использую gcc version 9.2.1 20191130 (Debian 9.2.1-21)

Ответы [ 3 ]

4 голосов
/ 03 марта 2020

Нет, правильный путь:

struct database {
  char* Name;
  char* Title;
  char* DOB;
  int EmployeeNo;
} people[100]={ { "Jon", "Manager", "1-1-1990", 12345 },
                { "Bob", "Accountant", "1-1-1990", 54321 }
              };

Это применимо в C89, C90, C94, C99, C11, C17 - и предварительно стандартно C, если инициализация выполняется в области видимости файла .

2 голосов
/ 03 марта 2020

Можно ли инициализировать структуру в C следующим образом:

Не совсем.
Существуют и другие способы инициализации в соответствии с другие ответы.
Вы можете назначить внутри функции с помощью составного литерала .

people[0] = 
    (struct database){ "Jon", "Manager", "1-1-1990", 12345 };
people[1] = 
    (struct database){ "Bob", "Accountant", "1-1-1990", 54321 };
2 голосов
/ 03 марта 2020

Нет, сделайте это так:

struct database {
    char* Name;
    char* Title;
    char* DOB;
    int EmployeeNo;
};

struct database ppl[5] = {
    { .Name = "Jon",  .Title = "Manager", .DOB = "1-1-1990", .EmployeeNo = 12345 },
    { .Name = "Ravi", .Title = "Manager", .DOB = "1-1-1990", .EmployeeNo = 12345 },
    {.....},
    {.....},
    {.....},
};

Инициализация и определение должны выполняться одновременно - в противном случае вы назначаете, а не инициализируете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...