Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > структура и файл


Автор: TeeT 20.12.2005, 16:31
есть код:
Код

...
struct *NODE
{
 int buf;
 char ch;
 NODE *pNext;
};
...
NODE* Chain = NULL;
NODE* Last = NULL;
...

for( int i=0; i<10; i++ ) {
 NODE* p = (NODE*)malloc(sizeof(NODE));

 memset(p,0,sizeof(S_ENODE));
        
  p->buf = i;
  p->ch = (char)i;
  if( Last == NULL )
   Chain = p;
  else
   Last->pNext = p;
 Last = p;
 }

....
FILE *out = fopen("res.out","w");

for(NODE *p = Chain; p; p = p->pNext)
 fwrite(&p, sizeof(NODE), 1, out);

fclose(out);


в строчке
Код

 fwrite(&p, sizeof(NODE), 1, out);

в файл помимо информации заносятся и адреса указателей (насколько я понимаю),
вопрос: мне отдельную структуру создавать для записи в файл или можно как нибудь избавится от адресов smile

Автор: Neitron 20.12.2005, 16:37
http://forum.vingrad.ru/index.php?showtopic=65661

Автор: Earnest 20.12.2005, 16:46
Если места в файле не жалко, плюнь - путь пишутся.
Потом, при чтении, все равно нужно список связывать заново.

Автор: TeeT 20.12.2005, 17:01
Всем спасибо.
P.S. так получилось, и не долго
Код

...
struct FOR_SAVE{
 int buf;
 char ch;
};
...
FILE *out = fopen("res.out","w");

for(NODE *p = Chain; p; p = p->pNext)
{
 FOR_SAVE tmp;
 tmp.buf = p->buf;
 tmp.ch = p->ch; 
 fwrite(&tmp, sizeof(FOR_SAVE), 1, out);
}
fclose(out);


Автор: threef 20.12.2005, 17:02
Я бы предложил просто базовый класс

Код

struct VALUE{
 int buf;
 char ch;
};
struct NODE:VALUE
{
 NODE *pNext;
};

Автор: TeeT 20.12.2005, 17:06
Ты прав smile просто я пишу на С, а не на С++

Автор: Earnest 21.12.2005, 08:26
Тогда уж лучше использовать offsetof и наставить ASSERT'ов, проверяющих, что структура не изменилась:
Код

struct NODE
{
 int buf;
 char ch;
 NODE *pNext;
};

void foo()
{
 size_t size = offsetof(NODE,pNext);
 ASSERT(sizeof(NODE)==size + sizeof(NODE*));

 ...
 NODE tmp; 
 ...

 fwrite(&tmp, size, 1, out);
}

Конечно, в зависимости от выравнивания могут записаться лишние байты, но зато надежнее, чем 2 несвязанные структуры.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)