обнулить массив в 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 бронзовых знака