Почему файл пустой?

Тема в разделе "Общие вопросы по С и С++", создана пользователем -, 20 янв 2010.

  1. Гость

    Вроде бы делаю всё верно...
    Объявлен массив структур

    Код (C++):
    struct book {
    int index;
    char title[20];
    char autor[20];
    int publdate;
    int number;
    } lib [SIZE];
    Заполняю массив

    Код (C++):
        cout << "Порядковый номер книги -> ";
    cin >> lib[i].index;
    cout << "Название книги -> ";
    cin >> lib[i].title;
    cout << "Автор книги -> ";
    cin >> lib[i].autor;
    cout << "Год издания книги -> ";
    cin >> lib[i].publdate;
    cout << "Количество -> ";
    cin >> lib[i].number;
    Дальше сохраняю в бинарном режиме

    Код (C++):
      FILE *out;
    char fname[20];
    printf("Введите имя файла\n");
    scanf("%s", &fname);
    if ((out = fopen (fname, "wb")) == NULL)
    {
    printf("Ошибка открытия файла\n");
    getch();
    return;  
    }
    fwrite(&lib, sizeof(lib), SIZE, out);
    fclose(out);
     

    Вложения:

    • LB_11_8.CPP
      Размер файла:
      4 КБ
      Просмотров:
      17
  2. Yerty

    Yerty Гость

    Незнаю, он может потому что есть '\0' тогда несохраняется. Я :)
     
  3. RocknRolla

    RocknRolla Гость

    Попробуй напистаь функцию для записи структуры в файл:
    void writestructure(ofstream out, strutct lib)
    {
    out<<lib.index;
    /*----
    */
    }
     
  4. astronom

    astronom Гость

    Выделяйте временный буфер, туда, в цикле, копируйте по одной структуре и сохраняйте в файл.
    Ибо, где гарантия, что память под структуру выделяется непрерывно?
     
  5. Ambroyz

    Ambroyz Гость

    сразу вижу 1 ошибку: прототип функции записи в файл
    Код (Text):
    size_t fwrite( const void *buffer, size_t size, size_t count, FILE *stream );
    1й аргумент указатель на буфер, в Вашем коде указатель на указатель первый элемент, т.к. имя массива является указателем
    К тому же, хотя бы лично для себя поставили проверку возврашаемого значения этой функции, оно покажет сколько функция записала в файл.

    2astronom
    Насколько я помню, массивы всегда выделяются непрерывно, во всяком случаев виртуальном адресном пространстве.
     
Загрузка...

Поделиться этой страницей