Инициализируйте каждого члена в пустой строке C - PullRequest
1 голос
/ 09 марта 2019

Инструкция потребовала, чтобы я объявил переменную типа Name, которая будет использоваться для хранения полного имени контакта, но как мне точно инициализировать каждый элемент пустой строкой C?

type Nameзаголовочный файл:

struct Name {
    char firstName[31];
    char middleInitial[7];
    char lastName[36];
};

Моя попытка: struct Name myname = { {0} };

Правильно ли я это сделал?

1 Ответ

3 голосов
/ 09 марта 2019

struct Name myname = { {0}}; близко

предупреждение: отсутствует инициализатор для поля 'middleInitial' из 'имя структуры' [-Wmissing-field-initializers]

{0} достаточно. @ machine_1


Альтернатива, указанная ниже.Это зависит от того, насколько выразительным вы хотите быть.

struct Name {
  char firstName[31];
  char middleInitial[7];
  char lastName[36];
};

// struct Name myname = { {0}};
struct Name myname1 = {0};
struct Name myname2 = { {0}, {0}, {0}};
struct Name myname3 = { "", "", "" };
struct Name myname4 = { .firstName = "", . middleInitial = "", .lastName = "" };
struct Name myname5 = { .firstName = "" };
struct Name myname6 = { { [0] = 0 }, "", {0}};
// many others

В C инициализируется либо все объекта, либо ни одного из него, без частичной инициализации.

Когда инициализация не завершена, остальное заполнено чем-то, что обычно представляет собой биты нулей.Подробности, подходящие для другого вопроса.


Примечание: если бы struct Name myname находилось в глобальном пространстве или static, оно получило бы инициализацию по умолчанию «ноль», даже без явного инициализатора.

struct Name myname;
int main() {
  printf("<%s>\n", myname.firstName); // prints "<>\n"
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...