Форум программистов
 
О проблемах, например, с регистрацией пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль.

Вернуться   Форум программистов > C++ > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Ответ
 
Опции темы
Старый 04.07.2009, 23:47   #1
Артэс
Форумчанин
 
Регистрация: 05.06.2007
Сообщений: 527
Вопрос очистка переменной

Здравствуйте.

Есть переменная-массив типа char a[100]; ... так вот, как мне полностью удалить все данные этой переменной? пробовал преобразовать из строки
Код:
blank=" ";
strcpy(a,blank.c_str());
не получилось... я думал обнулится все в этой переменной, но оказывается такой способ не удаляет всю оставшуюся информацию.
Артэс вне форума Ответить с цитированием
Старый 05.07.2009, 00:03   #2
profi
Участник клуба Подтвердите свой е-майл
 
Регистрация: 19.11.2007
Сообщений: 1,022
По умолчанию

Код:
char *a=new char[100];
AnsiString blank="Hello!";
strcpy(a,blank.c_str());
delete []a;
profi вне форума Ответить с цитированием
Старый 05.07.2009, 01:36   #3
vvviperrr
Тупой студент
Форумчанин
 
Аватар для vvviperrr
 
Регистрация: 12.05.2007
Сообщений: 614
По умолчанию

Код:
char a[100];
memset(a, 0, sizeof(a));
vvviperrr вне форума Ответить с цитированием
Старый 05.07.2009, 11:45   #4
Артэс
Форумчанин
 
Регистрация: 05.06.2007
Сообщений: 527
По умолчанию

Спасибо. Получилось

И еще... я тут понял, что мне нужен наверное динамичный массив... т.е хочу сначало его просто создать, а потом "расширить" на сколько это нужно

Код:
char *a = new char[100];
...
int x=1000; // допустим так
a = new char[x];
strcpy(data,text.c_str());
...
вообщем в строке text гораздо больше символов, посему и нужно расширить массив до 1000 например... но не получилось

Последний раз редактировалось MaTBeu; 06.07.2009 в 10:27.
Артэс вне форума Ответить с цитированием
Старый 05.07.2009, 14:35   #5
profi
Участник клуба Подтвердите свой е-майл
 
Регистрация: 19.11.2007
Сообщений: 1,022
По умолчанию

Цитата:
Сообщение от Артэс Посмотреть сообщение
Спасибо. Получилось

И еще... я тут понял, что мне нужен наверное динамичный массив... т.е хочу сначало его просто создать, а потом "расширить" на сколько это нужно
То, что вы создаете и есть динамическим массивом.

Цитата:
char *a = new char[100];
...
int x=1000; // допустим так
a = new char[x];
strcpy(a,text.c_str());
...

вообщем в строке text гораздо больше символов, посему и нужно расширить массив до 1000 например... но не получилось
Нужно так:

Код:
char *a = new char[100];
...
int x=1000; 
delete []a;
a = new char[x];
strcpy(a,text.c_str());
Сначало очистить уже существующую память, а потом заново выделить её и записать туда массив символов(строку).

Последний раз редактировалось profi; 05.07.2009 в 15:19.
profi вне форума Ответить с цитированием
Старый 05.07.2009, 15:08   #6
Артэс
Форумчанин
 
Регистрация: 05.06.2007
Сообщений: 527
По умолчанию

Да я знаю что создаю динамический массив...

Теперь проблема... после того как создал его, в него не могу погрузить информацию (пытаюсь принять данные с сокета)
Код:
recv(connection,a,1000,0);
... программа крашает... а перед тем как погружать, сразу после создания
Код:
char *a=new char[100];
проверяю его
Код:
cout<<a;
и на экране отображается буква "х" и смайлик, а позже равно... что за прикол? буд-то массив не пустой создался...

вот вообщем примерный алгоритм того что делаю:
Код:
char *a = new char[100];
...
delete []a;
a = new char[1000];
memset(a,0,sizeof(a)); // отщищаю для последующего приема данных
recv(connection,a,1000,0); // пытаюсь поместить данные и тут-то краш
...

Последний раз редактировалось Артэс; 05.07.2009 в 15:21.
Артэс вне форума Ответить с цитированием
Старый 05.07.2009, 15:35   #7
profi
Участник клуба Подтвердите свой е-майл
 
Регистрация: 19.11.2007
Сообщений: 1,022
По умолчанию

Это лишнее в вашем коде
Код:
memset(a,0,sizeof(a)); // отщищаю для последующего приема данных
так как указатель *a и так "чист".
profi вне форума Ответить с цитированием
Старый 05.07.2009, 15:49   #8
Артэс
Форумчанин
 
Регистрация: 05.06.2007
Сообщений: 527
По умолчанию

Тем неменее, все-равно краш.

А если делаю обычный массив char a[1000]; то все нормально...

Последний раз редактировалось Артэс; 05.07.2009 в 15:56.
Артэс вне форума Ответить с цитированием
Старый 05.07.2009, 16:09   #9
Артэс
Форумчанин
 
Регистрация: 05.06.2007
Сообщений: 527
По умолчанию

А может быть дело в extern char a[1000]; ?

У меня команды сокетов в другом файле... а массив создаю в основном файле... т.е получается

основной файл:
Код:
char *a = new char[1000];
а в другом:
Код:
extern char a[1000];
...
int test()
{
recv(connection,a,1000,0);
}
а функцию test(); вызываю из основного файла... где и объявлен сам массив
Артэс вне форума Ответить с цитированием
Старый 06.07.2009, 10:04   #10
Артэс
Форумчанин
 
Регистрация: 05.06.2007
Сообщений: 527
По умолчанию

так есть у кого-нибудь идеи?
Артэс вне форума Ответить с цитированием
Ответ

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Имя переменной как переменная. Как получить доступ к такой переменной? Denni Microsoft Office Access 8 02.04.2009 09:06
Очистка MEMO SG13 Общие вопросы Delphi 5 23.07.2008 20:56
Очистка TImage TaTT DoGG Компоненты Delphi 2 14.05.2008 19:57
Очистка памяти в C# darkstarx Общие вопросы .NET 1 14.04.2008 13:48
Работа с файлами (создание, удаление, открытие, связываение с переменной, очищение памяти переменной) Arkuz Общие вопросы Delphi 12 25.09.2007 19:47


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS