Поиск:

Ответ в темуСоздание новой темы Создание опроса
> очистка структуры, правильные методы очистки структур 
:(
    Опции темы
osmus
Дата 11.2.2009, 16:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 58
Регистрация: 12.6.2008

Репутация: нет
Всего: нет



Может эта тема в раздел "Для новичков"...... 

есть структура:
Код

1.
 struct GlobalHistoryOwners
{
 int counter;
 int id_owner;
 int id_garage;
 AnsiString own_from;
 AnsiString own_to;
};
extern GlobalHistoryOwners *GlbHistoryOwners;

2.
GlobalHistoryOwners *gHistOwnGar;
3.
gHistOwnGar = new GlobalHistoryOwners;
 


Всем известно что memset(gHistOwnGar,0,sizeof(gHistOwnGar)); должно очистить всю структуру, но оно очищает только поле counter.
memset(gHistOwnGar,0,1000); - очищает всю структуру...... ну мне кажется, что это в корень неправильно!

Просветите как правильно очистить структуру smile

Добавлено через 6 минут и 35 секунд
Ой оно не работает, тоисть очищает и тогда критикует ....
PM MAIL   Вверх
Comm
Дата 11.2.2009, 17:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 269
Регистрация: 31.8.2007
Где: Санкт-Петербург

Репутация: 2
Всего: 1



Код

struct GlobalHistoryOwners
 { int counter;
   int id_owner;
   int id_garage;
   AnsiString own_from;
   AnsiString own_to;
 }sss;
 sss.counter=13;
 sss.id_owner=333;
 sss.id_garage=555;
 sss.own_from="sdasd";
 sss.own_to="weqweqwe";
 ShowMessage(IntToStr(sss.counter)+"\r\n"+IntToStr(sss.id_owner)+"\r\n"+IntToStr(sss.id_garage)+"\r\n"+sss.own_from+"\r\n"+sss.own_to);
 memset(&sss,0,sizeof(sss));//Можешь и этой функцией ZeroMemory(&sss,sizeof(sss));

 ShowMessage(IntToStr(sss.counter)+"\r\n"+IntToStr(sss.id_owner)+"\r\n"+IntToStr(sss.id_garage)+"\r\n"+sss.own_from+"\r\n"+sss.own_to);



--------------------
=)))))
user posted image
PM MAIL ICQ   Вверх
Alca
Дата 11.2.2009, 19:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 25
Всего: 50



Цитата

Код

memset(gHistOwnGar,0,sizeof(gHistOwnGar));    //gHistOwnGar - поинтер


Я так понял gHistOwnGar эт указатель, 
а размер указателя равен  4 (32-bit) и 8 (64-bit).  smile 
Так типа будет вернее:
Код

memset((void *)&sss,0,sizeof(GlobalHistoryOwners));


Это сообщение отредактировал(а) Alca - 11.2.2009, 19:05


--------------------
PM WWW ICQ Skype Jabber   Вверх
Dem_max
Дата 11.2.2009, 20:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

Репутация: 14
Всего: 39



osmus, 
Юзай структуры так, не будешь путаться
Код

typedef struct _DATA{
    DWORD dwSize;         
    DWORD dwICC;
    char str[1];         
} DATA, *PDATA;

....................
DATA data;
...........................................
PDATA pdata;
pdata = new DATA;

ZeroMemory(&DATA, sizeof(DATA));
..........................................

И считаю что пользоваться AnsiString внутри структуры это не кошерно.


--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
osmus
Дата 11.2.2009, 23:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 58
Регистрация: 12.6.2008

Репутация: нет
Всего: нет



Че то не то:

Код

Файл glb_init.h

struct garage_struct
{
  int id;
  int number;
  int street_id;
  char g_type[2];
  char gos_num_meter[20];
  char date_vvoda_exp_meter[10];
  int nach_pokaz_meter;

};


#include <vcl.h>
#pragma hdrstop

#include "glb_unit.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TAEDGarage *AEDGarage;

 garage_struct OldGarage;

 void __fastcall TAEDGarage::InitGar(void)
{

  memset(&OldGarage,0,sizeof(OldGarage));

 OldGarage.id            = StrToInt(MDIISTOK->IDSelG->Text);
 OldGarage.number        = StrToInt(Trim(MaskEdit1->Text));
 OldGarage.street_id     = StrToInt(DBLookupComboBox2->Text);
 OldGarage.g_type        = DBLookupComboBox1->Text.c_str();
 OldGarage.nach_pokaz_meter = StrToInt(Edit2->Text);
 AnsiString date_str = DateToStr(DateTimePicker3->Date);
 OldGarage.date_vvoda_exp_meter = date_str.c_str();
 OldGarage.gos_num_meter = Edit3->Text.c_str();
 

Ошибка: [C++ Error] OperGarages.cpp(261): E2277 Lvalue required
На строки:  
OldGarage.g_type        = DBLookupComboBox1->Text.c_str();
OldGarage.date_vvoda_exp_meter = date_str.c_str();
OldGarage.gos_num_meter = Edit3->Text.c_str();
 
PM MAIL   Вверх
Alca
Дата 11.2.2009, 23:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 25
Всего: 50



Учи матчасть smile 


--------------------
PM WWW ICQ Skype Jabber   Вверх
Comm
Дата 12.2.2009, 00:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 269
Регистрация: 31.8.2007
Где: Санкт-Петербург

Репутация: 2
Всего: 1



Цитата

Ошибка: [C++ Error] OperGarages.cpp(261): E2277 Lvalue required
На строки:  
OldGarage.g_type        = DBLookupComboBox1->Text.c_str();
OldGarage.date_vvoda_exp_meter = date_str.c_str();
OldGarage.gos_num_meter = Edit3->Text.c_str();

С типом char* такой способ присвоения не прокатывает))

Делай так :
Код

strcpy(OldGarage.g_type,DBLookupComboBox1->Text.c_str());



Это сообщение отредактировал(а) Comm - 12.2.2009, 01:03


--------------------
=)))))
user posted image
PM MAIL ICQ   Вверх
math64
Дата 12.2.2009, 08:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 4
Всего: 72



Перед 
Код

#include <vcl.h>
#pragma hdrstop
 лучше ничего не вставлять, кроме комментариев, иначе это ведёт к разрастанию файла прекомпилированных заголовков.
Если в структуре есть AnsiString или поля, имеющие конструкторы, она сама должна инициализироваться конструктором, а не с помощью memset.
Если в структуре есть поля типа char[], они заполняются strcpy() или strncpy().
Код

struct S {
char name[10];
};

S s;
memset (&s, 0, sizeof(S));
AnsiString str = Form1->Caption; // рекомендую копировать свойство в локальную переменную перед использованием c_str()
strncpy(s.name. str.c_str(), sizeof(S) - 1); // оставляем 1 байт на конечный 0


Это сообщение отредактировал(а) math64 - 12.2.2009, 08:28
PM   Вверх
osmus
Дата 12.2.2009, 08:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 58
Регистрация: 12.6.2008

Репутация: нет
Всего: нет



Понятно smile 

А как быть с представлением дат в структуре? Их тоже можно держать в char? пример:

Код

struct S {
char date[10];
};

S s;
memset (&s, 0, sizeof(S));
AnsiString str = DateToSrt(DateTimePicker1->Date);
strncpy(s.name. str.c_str(), sizeof(S) - 1); 



Или есть какие то лучшие методы?

Это сообщение отредактировал(а) osmus - 12.2.2009, 08:44
PM MAIL   Вверх
math64
Дата 12.2.2009, 09:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 4
Всего: 72



Даты можно хранить в time_t (число секунд прошедших от 01.01.1970 00:00:00 GMT), в Visual C++ это 64-битная переменная, в старых компиляторах 32-битная (32 бит после 2037 будет не хватать). Есть ещё SYSTEMTIME, FILETIME
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.1087 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.