Как обнулить переменную char c
🙂 Привет! Глупый и простой вопрос возник. Как мне очистить массив типа 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
- Следующая тема
Как обнулить переменную char c
Есть переменная-массив типа char a[100]; . так вот, как мне полностью удалить все данные этой переменной? пробовал преобразовать из строки
blank=" "; strcpy(a,blank.c_str());
не получилось. я думал обнулится все в этой переменной, но оказывается такой способ не удаляет всю оставшуюся информацию.
Участник клуба Подтвердите свой е-майл
Регистрация: 19.11.2007
Сообщений: 1,022
char *a=new char[100]; AnsiString blank="Hello!"; strcpy(a,blank.c_str()); delete []a;
Тупой студент
Форумчанин
Регистрация: 12.05.2007
Сообщений: 614
char a[100]; memset(a, 0, sizeof(a));
Форумчанин
Регистрация: 05.06.2007
Сообщений: 529
И еще. я тут понял, что мне нужен наверное динамичный массив. т.е хочу сначало его просто создать, а потом «расширить» на сколько это нужно
char *a = new char[100]; . int x=1000; // допустим так a = new char[x]; strcpy(data,text.c_str()); .
вообщем в строке text гораздо больше символов, посему и нужно расширить массив до 1000 например. но не получилось
Последний раз редактировалось MaTBeu; 06.07.2009 в 11:27 .
Участник клуба Подтвердите свой е-майл
Регистрация: 19.11.2007
Сообщений: 1,022
Сообщение от Артэс
И еще. я тут понял, что мне нужен наверное динамичный массив. т.е хочу сначало его просто создать, а потом «расширить» на сколько это нужно
То, что вы создаете и есть динамическим массивом.
char *a = new char[100]; . int x=1000; delete []a; a = new char[x]; strcpy(a,text.c_str());
Сначало очистить уже существующую память, а потом заново выделить её и записать туда массив символов(строку).
Последний раз редактировалось profi; 05.07.2009 в 16:19 .
Форумчанин
Регистрация: 05.06.2007
Сообщений: 529
Да я знаю что создаю динамический массив.
Теперь проблема. после того как создал его, в него не могу погрузить информацию (пытаюсь принять данные с сокета)
recv(connection,a,1000,0);
. программа крашает. а перед тем как погружать, сразу после создания
char *a=new char[100];
проверяю его
cout
и на экране отображается буква "х" и смайлик, а позже равно. что за прикол? буд-то массив не пустой создался.
вот вообщем примерный алгоритм того что делаю:
char *a = new char[100]; . delete []a; a = new char[1000]; memset(a,0,sizeof(a)); // отщищаю для последующего приема данных recv(connection,a,1000,0); // пытаюсь поместить данные и тут-то краш .
Последний раз редактировалось Артэс; 05.07.2009 в 16:21 .
Обнуление строки string
Какой смысл вы вкладываете во "временность" опустошения строки? А в не временном случае должно быть какое-то другое решение?
27 фев 2018 в 12:02
@Kromster что бы сразу отсеять предложения о полном удалении переменной через деструктор.
27 фев 2018 в 12:05
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
m.clear(); if (m.empty())
Отслеживать
ответ дан 27 фев 2018 в 11:57
moskalenco_a moskalenco_a
918 5 5 серебряных знаков 19 19 бронзовых знаков
Так даже лучше. clear() делает одну-единственную операцию — обнуляет поле длины строки. А исходно предлагаемое присваивание "" вызывает попытку скопировать строковый литерал (хоть и состоящий из одного нуль-терминатора).
27 фев 2018 в 12:19
@Arhad у clear сложность линейная, более того: "Effects: Behaves as if the function calls: erase(begin(), end()); "
27 фев 2018 в 14:22
@alexolut, libstdc++ так не думает. clear() вызывает _M_mutate() , передавая ей исходную длину строки и нули в качестве новой длины и смещения. Далее, единственное, что вызывает _M_mutate() с такими аргументами — это _M_set_length_and_sharable() , помечающая буфер общим и выполняющая this->_M_length = __n; . Получаем константную сложность.
Как удалить символ char из его же массива
Всем привет. Есть такая задача : В Входном файле дается никнейм, нам надо, чтобы в таблице сортировки по имени этот ник стоял как можно ниже, притом удалить можно только один символ. Мой код:
ifstream in("input.txt"); ofstream out("output.txt"); string str; char ch[str.size()],temp; in >> str; strcpy(ch, str.c_str()); temp=ch[0]; for(int i=0;i temp) < delete ch[i]; break; >else temp=ch[i]; > string str2=ch; out
Мы смотрим, если второй символ ниже в алфавите первого, мы первый удаляем Компилятор указывает на одну единственную ошибку - delete ch[i]; Eroor:type 'char' argument given to 'delete', expected pointer Как быть?
Отслеживать
задан 21 сен 2018 в 20:01
Влад Ковальчук Влад Ковальчук
73 2 2 серебряных знака 8 8 бронзовых знаков
Ну во-первых char ch[str.size()] массивы с автоматическим хранением не являются стандартной фичей языка. Во-вторых delete ch[i]; некорректно, так как аргумент не является указателем, выделенным при помощи new . Под "удалить" тут явно понимается переместить символы после i -го на один назад.
21 сен 2018 в 20:15
ясно сказано, что ожидается указатель. Вы пытетесь удалять значение
21 сен 2018 в 20:16
приведите пример входных и выходных данных, а то ничего не понятно
21 сен 2018 в 20:29
@Hovsepyan smith-smth
21 сен 2018 в 20:33
практически удаляете самый меньший символ в строке?
21 сен 2018 в 20:36
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
delete не из той оперы.
Ваше delete ch[i]; следует развернуть в
for(int j = i+1; ch[j-1] = ch[j]; ++j);
Или воспользоваться memmove() .
Отслеживать
ответ дан 22 сен 2018 в 3:44
219k 15 15 золотых знаков 120 120 серебряных знаков 230 230 бронзовых знаков
Слушайте, а что вы сдесь вообще делаете? Вот у вас есть некая переменная str, которая, как можно заключить из метода c_str() имеет тип std::string. Так зачем вы используете массив char? Не поймите меня неверно, я люблю Си, но вот зачем использовать функции из cstring в перемешку с классом string? Тем более что вы это делаете не верно. И раз уж у вас вопрос с меткой с++, то порекомендую сделать все через string (и правильно). Как то так:
ifstream in("input.txt"); ofstream out("output.txt"); std::string str; // сдесь вы вообще брали у str size, который равен 0 на данный момент in >> str; // две строки сдесь вообще не нужны - у вас дублирование данных // далее вы в вопросе указали что нужно удалить первый символ, если он меньше второго, но почему то обходите всю строку, вместо того, чтобы сделать так: if (str[0] < str[1]) str.erase(str.begin()); else str.erase(1); out
Обратите внимание, что не только код сократился, но и количество переменных тоже сократилось. Ровно до одной.