LINUX.ORG.RU

Начальное значение будет тем, что хранилось в соответствующей ячейке памяти до инстанцирования структуры. ЕМНИП, в С99 можно применять списки инициализации:

struct A {int a; int b;};
struct B {double a; double b;};
struct C { struct A a; struct B b;};

struct C i = {{0, 0}, {0.0, 0.0}};

hippi90 ★★★★★
()
Ответ на: комментарий от hippi90

разве только в c99? ЕМНИП, там добавили фичу: инициализация в стиле .field = value

demidrol ★★★★★
()
Ответ на: комментарий от cattail
typedef struct
{
  char* socket_designation;
  char* type;
  char* family;
  char* manufacturer;
  char* id;
  char* signature;
  char** flags;
  char* version;
  char* voltage;
  char* external_clock;
  char* max_speed;
  char* current_speed;
  char* status;
  char* upgrade;
  char* l1_cache_handle;
  char* l2_cache_handle;
  char* l3_cache_handle;
  char* serial_number;
  char* asset_tag;
  char* part_number;
  char* core_count;
  char* core_enabled;
  char* thread_count;
  char* characteristics;
}dmi_cpu_info;
typedef struct
{
  char* vendor;
  char* version;
  char* release_date;
  char* address;
  char* runtime_size;
  char* rom_size;
  char** characteristics;
  char* revision;
}dmi_bios_info;
typedef struct
{
  char* manufacturer;
  char* product_name;
  char* version;
  char* serial_number;
}dmi_bb_info;
typedef struct
{
  char* manufacturer;
  char* type;
  char* lock;
  char* version;
  char* serial_number;
  char* asset_tag;
  char* bootup_state;
  char* power_supply_state;
  char* thermal_state;
  char* security_status;
}dmi_chassis_info;
typedef struct
{
  // dmi_cpu_info** dmi_cpu_info;
  //dmi_bb_info* dmi_bb_info;
  //dmi_bios_info* dmi_bios_info;
  //dmi_sys_info* dmi_sys_info;
  //dmi_chassis_info* dmi_chassis_info;
  //dmi_cache_info** dmi_cache_info;
}dmi_info;
typedef struct
{
  char* version;
  char* uptime;
}os_info;
typedef struct
{
//здесь тоже указатели на char
}cpu_info;
typedef struct
{
  char** list_of_users;
  char** current_logged_users;
}users_info;
typedef struct
{
  char* version;
  char** list_of_loaded_modules;
}kernel_info;
typedef struct
{
  kernel_info* kernel_info_db;
  users_info* users_info_db;
  os_info* os_info_db;
  cpu_info* cpu_info_db;
  dmi_info* dmi_info_db;	
}info;


кажется, нет

netcat ★★
() автор топика
Ответ на: комментарий от netcat

стоп, а если подумать... да, можно

netcat ★★
() автор топика

если используешь calloc вместо malloc - память зануляется.

в структурах на стеке изначально мусор. для обхода - можно юзать либо memset, либо инициализировать вот так(если структура позволяет):

struct my_struct s = {0};

anonymous
()

C позволяет инициализировать любую структуру инициализатором {0}:

struct whatever var = {0};

Инициализатор {0} особенный, он говорит о том, что переменную нужно инициализировать нулевыми байтами. Сложность структуры не имеет значения.

iliyap ★★★★★
()

При отсутствии инициализации структура заполняется мусором.

Её можно инизиализировать {0}, тогда

- скалярные типы получат значение 0

- указатели NULL.

Забивание структуры нулями с помощью calloc/memset не гарантирует установку значений полей по умолчанию для float, double и указателей.

sched
()
Ответ на: комментарий от sched

>Забивание структуры нулями с помощью calloc/memset не гарантирует установку значений полей по умолчанию для float, double и указателей.

ссылку дашь?

Boy_from_Jungle ★★★★
()
Ответ на: комментарий от sched

>Забивание структуры нулями с помощью calloc/memset не гарантирует

Читай стандарт в районе указателей и предстевление в памяти double, float.

ono
()
Ответ на: комментарий от Boy_from_Jungle

7.20.3

The calloc function allocates space for an array of nmemb objects, each of whose size is size. The space is initialized to all bits zero.[264]

264) Note that this need not be the same as the representation of floating-point zero or a null pointer constant.

sched
()
Ответ на: комментарий от iliyap

> Инициализатор {0} особенный, он говорит о том, что переменную нужно инициализировать нулевыми байтами.

4.2

Это самый обычный инициализатор. Вместо {0} может быть {1} или {1,1} и вообще любой whatever.

Просто при неполной инициализации структуры все неинициализированные явно члены будут проинициализированны в нулевые объекты соответствующего типа. Соответственно, чтобы проинициализировать всю структуру нулём достаточно проинициализировать нулём её первый элемент.

Тоже самое относится и к массивам.

Всегда ваш.

LamerOk ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.