Как обнулить переменную char c
Перейти к содержимому

Как обнулить переменную char c

  • автор:

Как обнулить переменную 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  

Обратите внимание, что не только код сократился, но и количество переменных тоже сократилось. Ровно до одной.

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

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