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

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

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


Донат для форума - использовать для поднятия настроения себе и модераторам

А ещё здесь можно купить рекламу за 25 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

Ответ
 
Опции темы
Старый 05.07.2009, 00:47   #1
Артэс
Участник клуба
 
Регистрация: 05.06.2007
Сообщений: 524
Репутация: 21
Вопрос очистка переменной

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

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

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

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

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

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

Код:
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.
Артэс вне форума   Ответить с цитированием
Старый 05.07.2009, 15:35   #5
profi
ПрофессионалФорумчанин
 
Регистрация: 19.11.2007
Сообщений: 1,022
Репутация: 144
По умолчанию

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

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

Цитата:
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 в 16:19.
profi вне форума   Ответить с цитированием
Старый 05.07.2009, 16:08   #6
Артэс
Участник клуба
 
Регистрация: 05.06.2007
Сообщений: 524
Репутация: 21
По умолчанию

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

Теперь проблема... после того как создал его, в него не могу погрузить информацию (пытаюсь принять данные с сокета)
Код:
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 в 16:21.
Артэс вне форума   Ответить с цитированием
Старый 05.07.2009, 16:35   #7
profi
ПрофессионалФорумчанин
 
Регистрация: 19.11.2007
Сообщений: 1,022
Репутация: 144
По умолчанию

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

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

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

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

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

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

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

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

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

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


15:10.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.