как записать значения структуры по умолчанию несколько раз, используя fwrite () - PullRequest
1 голос
/ 23 октября 2008

Я хочу записать структуру по умолчанию, N раз, в файл, используя fwrite.

typedef struct foo_s {

 uint32 A;
 uint32 B;
 char desc[100];

}foo_t;

void init_file(FILE *fp, int N)
{
   foo_t foo_struct = {0};
   foo_struct.A = -1;
   foo_struct.B =  1;

   fwrite(&foo_struct, sizeof(foo_struct), N, fp);    }

Приведенный выше код не записывает foo_struct N раз в поток файлов fp.

Вместо этого он записывает N * sizeof (foo_struct) байтов, начиная с & foo_struct, до fp.

Может кто-нибудь сказать, как добиться того же с помощью одного fwrite?

Ответы [ 2 ]

10 голосов
/ 23 октября 2008

Вы не можете с одним fwrite (). Вы должны использовать цикл:

int i;
for (i = 0; i < N; ++i)
    fwrite(&foo_struct, sizeof(foo_struct), 1, fp);

Третий параметр fwrite () - это количество объектов для записи, а не количество раз, чтобы написать один объект.

2 голосов
/ 23 октября 2008

Единственный способ сделать это с одним fwrite - это скопировать foo_struct N раз в RAM, а затем сделать один frrite всего этого RAM.

Я сомневаюсь, что выполнение malloc, N копий, а затем fwrite будет быстрее, чем просто создание N fwrites (это единственная причина, по которой я могу подумать о желании сделать это!), Но если вам действительно все равно должен попробовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...