The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Инициализация структуры"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Инициализация структуры"  
Сообщение от Answer on 05-Авг-07, 22:46 
Всем!
Сталкнулся с задачей:
Есть произвольная большая структура:
struct st_t {
  char *s;
  int **i;
  some_t *b;
  ...
};
Необходимо заполнить ее нулями. Подойдет ли для этой задачи memcpy?
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени, UBB]


1. "Инициализация структуры"  
Сообщение от phpcoder email(??) on 05-Авг-07, 22:49 
[...]
>Необходимо заполнить ее нулями. Подойдет ли для этой задачи memcpy?

Вы хотели сказать memset()? Думаю, да.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "Инициализация структуры"  
Сообщение от Answer on 06-Авг-07, 01:57 
>[...]
>>Необходимо заполнить ее нулями. Подойдет ли для этой задачи memcpy?
>
>Вы хотели сказать memset()? Думаю, да.

В данном случае, если *a, то a=NULL будет идентично a=0?

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "Инициализация структуры"  
Сообщение от jd (??) on 06-Авг-07, 04:22 
>В данном случае, если *a, то a=NULL будет идентично a=0?

"если *a" - имелось в виду "если a - указатель"?

Строго говоря, NULL не обязательно должен быть равен 0, но я не слышал про реально существующие платформы, где он не равен.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

4. "Инициализация структуры"  
Сообщение от Iceman email(??) on 06-Авг-07, 11:20 
>Всем!
>Сталкнулся с задачей:
>Есть произвольная большая структура:
>struct st_t {
>  char *s;
>  int **i;
>  some_t *b;
>  ...
>};
>Необходимо заполнить ее нулями. Подойдет ли для этой задачи memcpy?

Есть еще такой удобный способ: struct st_t aaa = {0};
При этом каждый элемент заполнится нулевыми значениями, которые соответствуют типам полей структуры: инты  - 0, double - 0.0, указатели - NULL и т.д. Также подходит и для инициализации массивов.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

5. "Инициализация структуры"  
Сообщение от perece on 07-Авг-07, 16:24 
>Есть еще такой удобный способ: struct st_t aaa = {0};
>При этом каждый элемент заполнится нулевыми значениями, которые соответствуют типам полей структуры:
>инты  - 0, double - 0.0, указатели - NULL и
>т.д. Также подходит и для инициализации массивов.

C++ специфик. вы не допускаете, что кто-то пишет без плюсов? если нет, то хотяб оговориться надо...

\^P^/

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

6. "Инициализация структуры"  
Сообщение от Iceman email(??) on 08-Авг-07, 15:29 
>>Есть еще такой удобный способ: struct st_t aaa = {0};
>>При этом каждый элемент заполнится нулевыми значениями, которые соответствуют типам полей структуры:
>>инты  - 0, double - 0.0, указатели - NULL и
>>т.д. Также подходит и для инициализации массивов.
>
>C++ специфик. вы не допускаете, что кто-то пишет без плюсов? если нет,
>то хотяб оговориться надо...
>
>\^P^/

С++ специфик я не знаю, потому как пишу пока только на чистом C. Но в умных книжках по С не просто советуют, а настоятельно рекомендуют использовать именно такой способ инициализации структур, поскольку только он гарантирует правильное представление нуля (при инициализации всей струтуры) для double (float) и указателей (NULL).

Кроме того, программа компилировалась так:
andrey@linux: gcc -x c test.c -ansi -std=c89

без единого замечания.

PS. Может быть я и не прав, тогда поправьте меня.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

7. "Инициализация структуры"  
Сообщение от perece on 09-Авг-07, 20:43 
>Кроме того, программа компилировалась так:
>andrey@linux: gcc -x c test.c -ansi -std=c89
>
>без единого замечания.

{долго чешет репу} ну не знаю. надо стандарты перечитать. я уж скока времени думал, что это плюсы. везде использовал memset (и у других видел его же).

\^P^/

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

8. "Инициализация структуры"  
Сообщение от Iceman email(??) on 10-Авг-07, 11:14 
>{долго чешет репу} ну не знаю. надо стандарты перечитать. я уж скока
>времени думал, что это плюсы. везде использовал memset (и у других
>видел его же).

Я тоже всегда пользовал memset и был счастлив, пока не узнал про '{}'.
Стандарт c99, раздел 6.7.8 - если я правильно понял, это что-то из новенького...

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

9. "Инициализация структуры"  
Сообщение от Икста email on 10-Авг-07, 11:26 
>Всем!
>Сталкнулся с задачей:
>Есть произвольная большая структура:
>struct st_t {
>  char *s;
>  int **i;
>  some_t *b;
>  ...
>};
>Необходимо заполнить ее нулями. Подойдет ли для этой задачи memcpy?

Да попробуйте и всё.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру