LINUX.ORG.RU

обнулить массив в C


0

0

Как наиболее правильно обнулить массив данных в C? Чтобы был обнулен не только первый элемент, но достоверно стерлись и все остальные.

anonymous

char a[100]; memset (a, 0, sizeof(a));

anonymous
()

и не забывай продвинутые виндовуз компиляторы
при оптимизации просто
пропускают оператор memset(a,0,sizeof(a));
что делает gcc Хз )

PS: опять все приходиться делать вручную (((

Aleks_IZA
()

С какого это перепоя? Если действительно есть такой компилятор, то это его глюк, а не оптимизация. Такое ощущение, что ты спутал 2 вещи:
- Просто выкинуть нафиг вызов memset.
- Вместо вызова memset использовать встроенный код (rep stosd или типа того). Т.е. по сути -- тот же memset, но без накладных расходов на push+call+ret+add.

nobody ★★
()

А ещё есть bzero. (может оно эфективнее будет)

anonymous
()

an$ man bzero

[skip]

CONFORMING TO
    4.3BSD. This function is deprecated -- use memset in  new
            programs.

В переводе с англ. это означает, что разработчики glibc рекомендуют
использовать в новых программах memset вместо bzero.

nobody ★★
()

char a[100]={0}; Работает классно! И не надо выдрючиваться.

kkk ★★
()

char a[100]={0}; Работает классно! И не надо выдрючиваться.

kkk ★★
()

2 kkk.
Такое ощущение, что в этом случае обнулится только a[0].
И потом, это работает только один раз. После того, как ты чего-то записал в `a', а затем решил его обнулить, `a={0};' вообще не прокатит.

nobody ★★
()

2nobody:
kkk прав, при инициализации массива, элементам "не хватившим " значений - инициализируются неявно \0. Для случая
char a[100] = { 0 }
a[0] - явно инициализируется 0-м
a[1]-a[99] - неявно инициализируются 0-м

ps: аналогичным образом можно инициализировать и структуры.
pss: все это есть в стандарте.

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

>2nobody: >kkk прав, при инициализации массива, элементам "не хватившим " >значений - инициализируются неявно \0. Для случая >char a[100] = { 0 } >a[0] - явно инициализируется 0-м >a[1]-a[99] - неявно инициализируются 0-м

>ps: аналогичным образом можно инициализировать и структуры. >pss: все это есть в стандарте.

--------------------- все что выше вранье. и зависит от компилятора но не факт покажы где есть в стандарте. используй memset

anonymous
()

Лучше всего memset При объявлении в gcc можно так: int a[100]={[0 ... 99] = 0}; ).

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