Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> проблема с fwrite 
:(
    Опции темы
marina12
Дата 21.5.2013, 23:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Здравствуйте!
Столкнулась с такой проблемой,что когда записываю в файл структуры с помощью fwrite, в файл печатаются иероглифы(скорее всего,адрес первого символа строки,который хранится в ячейке структуры...). Как этого можно избежать?Если можно,то объясните пожалуйста на моём примере,который приведен ниже (сохранение записной книжки в файл):
Код

struct Telo 
{
    char name[50];
    char lastname [60];
    char phone[35]; 
    char birthday [15];
    char adress [150];
    char comments [100];
};
struct Value
{
    Telo telo;
    Value *next;
};

Value *first = NULL; // Указатель на первый элемент списка

void Save()
{
    system("cls");
    char fileName[80]; // Имя файла                                                 
    printf("Enter the name of file for save: ");
    scanf("%s", fileName);
    cin.ignore(60, '\n');
    FILE *f;
    f= fopen(fileName, "wb"); 
    if (!f) 
    {
        printf("Error of opening file for save\n");
        return;
    }
    Value *v; // Указатель на текущий элемент списка
    v = first;
    while (v != NULL) {
        fwrite(v, sizeof(Value),1,f); // Записываем в файл одну структуру 
        v = v->next;
    }
    fclose(f); // Закрываем файл
    printf("notebook save into file\n");
    getch();
    system("cls");
    Menu();
}


Это сообщение отредактировал(а) bsa - 22.5.2013, 17:08
PM MAIL   Вверх
KaZepKa
Дата 21.5.2013, 23:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Интересно вы как-то записываете в файл, вам для этого нужно определить конкретно, что в файл записывать :  
Код

    char name[50];
    char lastname [60];
    char phone[35]; 
    char birthday [15];
    char adress [150];
    char comments [100];

А так он и записывает:
Код

   Value *v; // Указатель на текущий элемент списка

т.е. его адрес
PM MAIL   Вверх
feodorv
Дата 22.5.2013, 00:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

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



Цитата(marina12 @  22.5.2013,  00:19 Найти цитируемый пост)
в файл печатаются иероглифы

У Вас структура struct Telo не маленькая. Скорее всего непосредственно данными занята небольшая часть структуры, всё стальное - мусор, оставшийся при malloc или new (чем, кстати, Вы пользуетесь?) Чтобы этого не было, сразу после аллокации структуры делайте
Код

memset( v, 0, sizeof(Value));

а потом уже заполняйте структуру значениями.


И да, записывая в файл именно структуру struct Value, Вы записываете и её элемент Value *next; который также добавит иероглифов. Не знаю, что Вам в файле нужно, но если простой список структур struct Telo, то и записывать нужно только Telo:
Код

       fwrite( &v->telo, sizeof(struct Telo), 1, f); // Записываем в файл одну структуру 



--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

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

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

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

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


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

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


 




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


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

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