Всем!
Сталкнулся с задачей:
Есть произвольная большая структура:
struct st_t {
char *s;
int **i;
some_t *b;
...
};
Необходимо заполнить ее нулями. Подойдет ли для этой задачи memcpy?
[...]
>Необходимо заполнить ее нулями. Подойдет ли для этой задачи memcpy?Вы хотели сказать memset()? Думаю, да.
>[...]
>>Необходимо заполнить ее нулями. Подойдет ли для этой задачи memcpy?
>
>Вы хотели сказать memset()? Думаю, да.В данном случае, если *a, то a=NULL будет идентично a=0?
>В данном случае, если *a, то a=NULL будет идентично a=0?"если *a" - имелось в виду "если a - указатель"?
Строго говоря, NULL не обязательно должен быть равен 0, но я не слышал про реально существующие платформы, где он не равен.
>Всем!
>Сталкнулся с задачей:
>Есть произвольная большая структура:
>struct st_t {
> char *s;
> int **i;
> some_t *b;
> ...
>};
>Необходимо заполнить ее нулями. Подойдет ли для этой задачи memcpy?Есть еще такой удобный способ: struct st_t aaa = {0};
При этом каждый элемент заполнится нулевыми значениями, которые соответствуют типам полей структуры: инты - 0, double - 0.0, указатели - NULL и т.д. Также подходит и для инициализации массивов.
>Есть еще такой удобный способ: struct st_t aaa = {0};
>При этом каждый элемент заполнится нулевыми значениями, которые соответствуют типам полей структуры:
>инты - 0, double - 0.0, указатели - NULL и
>т.д. Также подходит и для инициализации массивов.C++ специфик. вы не допускаете, что кто-то пишет без плюсов? если нет, то хотяб оговориться надо...
\^P^/
>>Есть еще такой удобный способ: 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. Может быть я и не прав, тогда поправьте меня.
>Кроме того, программа компилировалась так:
>andrey@linux: gcc -x c test.c -ansi -std=c89
>
>без единого замечания.{долго чешет репу} ну не знаю. надо стандарты перечитать. я уж скока времени думал, что это плюсы. везде использовал memset (и у других видел его же).
\^P^/
>{долго чешет репу} ну не знаю. надо стандарты перечитать. я уж скока
>времени думал, что это плюсы. везде использовал memset (и у других
>видел его же).Я тоже всегда пользовал memset и был счастлив, пока не узнал про '{}'.
Стандарт c99, раздел 6.7.8 - если я правильно понял, это что-то из новенького...
>Всем!
>Сталкнулся с задачей:
>Есть произвольная большая структура:
>struct st_t {
> char *s;
> int **i;
> some_t *b;
> ...
>};
>Необходимо заполнить ее нулями. Подойдет ли для этой задачи memcpy?Да попробуйте и всё.