Перейти к содержимому

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

  • автор:

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

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

anonymous
08.06.03 00:22:30 MSD

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

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

anonymous
( 08.06.03 01:00:49 MSD )

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

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

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

Aleks_IZA ★
( 08.06.03 08:32:55 MSD )

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

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

nobody ★★
( 08.06.03 15:07:00 MSD )

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

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

anonymous
( 09.06.03 07:55:49 MSD )

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

an$ man bzero [skip] CONFORMING TO 4.3BSD. This function is deprecated -- use memset in new programs. В переводе с англ. это означает, что разработчики glibc рекомендуют использовать в новых программах memset вместо bzero.

nobody ★★
( 09.06.03 14:10:55 MSD )

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

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

kkk ★★
( 11.06.03 09:43:43 MSD )

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

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

kkk ★★
( 11.06.03 09:43:50 MSD )

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

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

nobody ★★
( 11.06.03 13:14:03 MSD )

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

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

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

anonymous
( 18.06.03 02:28:30 MSD )
Ответ на: Re: обнулить массив в C от anonymous 18.06.03 02:28:30 MSD

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

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

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

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

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

🙂 Привет! Глупый и простой вопрос возник. Как мне очистить массив типа char?
Я делал так:

char Massiv[100];
strcpy(Massiv, «»);

Но так не удобно, да и сам метод примитивен для очистки. Подскажите, как очищать легко и быстро?

И ещё! Не хчу тему создовать. Кто знает, где можно скачать видеоклип Глюк`oza и песня Невеста. Желательно чтоб размер экрана былы ХОРОШИМ и весь файл НЕ занимал менее 5 Мб. Лучше пусть он занимает мегобайт 20, я его скачать хочу. 8)

Сообщ. #2 , 27.05.03, 14:55

Рейтинг (т): 640
Цитата Владислав, 27.05.03, 18:46:23

Привет! Глупый и простой вопрос возник. Как мне очистить массив типа char?
Я делал так:

char Massiv[100];
strcpy(Massiv, «»);

Но так не удобно, да и сам метод примитивен для очистки. Подскажите, как очищать легко и быстро?

Не совсем понятен вопрос. Нужно обнулить весь массив или сделать строку нулевой длины?
Если первое — то:
memset
FillMemory
ZeroMemory
Если второе — то:
Massiv[0]=0;

Сообщ. #3 , 27.05.03, 15:12
Unregistered
Цитата trainer, 27.05.03, 18:55:26

Не совсем понятен вопрос. Нужно обнулить весь массив или сделать строку нулевой длины?
Если первое — то:
memset
FillMemory
ZeroMemory
Если второе — то:
Massiv[0]=0;

Спасибо! Надо только обнулить весь массив. Приведи примерчик. Я думаю это тебе не составит труда.

ЛЮДИ. ДРУГОЙ ВОПРОС.
Я создал свой КАДР, т.е. Frame1 объект. Как мне его сохранить так, чтоб я его мог многократно загружать из вкладки с компонентами. Саму вкладку я знаю как создавать. Но как туда положить мой Frame для многократного использования?

Сообщ. #4 , 27.05.03, 16:45

Рейтинг (т): 640

Варианты:
1) memset(Massiv,0,100);
2) FillMemory(Massiv,100,0);
3) ZeroMemory(Massiv,100);
Прим.: варианты 2 и 3 — только под Windows

Сообщение отредактировано: trainer — 28.05.03, 05:18
0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
0 пользователей:

  • Предыдущая тема
  • Borland C++ Builder/Turbo C++ Explorer
  • Следующая тема

Курсы javascript

рони, я тоже об этом подумал, но неоправдано. Во-первых если нужен 0 то обычно именно числом, а не текстом, а во-вторых цикл и то короче выходит.

__________________
04.08.2014, 09:25
Регистрация: 04.07.2014
Сообщений: 51

Массив не имеет определенных рамок (число элементов колеблется), но мне вместо ‘undefined’ нужно чтобы нули были..

То есть если взять к примеру другой язык программирования, тот же c++, то переменная при объявлении равна нулю, а не ‘undefined’.

04.08.2014, 10:14
Регистрация: 24.09.2013
Сообщений: 1,436

Никак. Это все равно что си заставить 1 казать вместо 0. Зачем тебе это? Для сравнения? undefined и так к false приводится.

Обнуление массива в Си

Как правильно обнулить массив? Речь о любых типах массива, будь то символьный, целочисленный, динамический и т.п Если способов несколько то желательно написать как можно больше. Способ, который изучен мною выглядит как — то так:

char str[100] = ; 

Но я не знаю является ли такой метод обнуления верным, с технической точки зрения и с точки зрения процедурного программирования и объектно-ориентированного программирования.

Отслеживать

задан 7 янв 2019 в 12:29

1,273 3 3 золотых знака 12 12 серебряных знаков 33 33 бронзовых знака

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *