Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.07.2013, 11:16   #11
Sem2001
 
Регистрация: 26.06.2013
Сообщений: 9
По умолчанию

так размер же должен быть константой.
Sem2001 вне форума Ответить с цитированием
Старый 03.07.2013, 11:31   #12
Sem2001
 
Регистрация: 26.06.2013
Сообщений: 9
По умолчанию

Нашел пример, но где то ошибка. Или в процессе записи в файл, или в чтении. Скажите что не так.

Код:
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct {
    int n;
    char *a;
} data_t;

data_t* alloc_data_t(const int n)
{
    data_t *data;
    data    = (data_t*)malloc(sizeof(data_t));
    data->n = n;
    data->a = (char*)calloc(n, sizeof(char));
    return data;
}

void free_data_t(data_t *data)
{
    free(data->a);
    free(data);
    data = NULL;
}


void put_data_t(FILE *stream, const data_t *data)
{
    fwrite(&data->n,  sizeof(int), 1, stream);
    fwrite(&data->a, data->n * sizeof(char), 1, stream);
}

data_t* get_data_t(FILE *stream)
{
    int n;
    data_t *data;
    fread(&n, sizeof(int), 1, stream);

    data = alloc_data_t(n);
    fread(&data->a, n * sizeof(char), 1, stream);
    return data;
}

void save_data_t(const char *fn, const data_t *data)
{
    FILE *f;
    f = fopen(fn, "wb");
    put_data_t(f, data);
    fclose(f);
}

data_t* load_data_t(const char *fn)
{
    FILE *f;
    data_t *data;

    f = fopen(fn, "rb");
    data = get_data_t(f);
    fclose(f);
    return data;
}


int main()
{
    clrscr();

    char *str="STRING FOR OUT";
    int len = strlen(str);

    data_t  *d1, *d2;

    d1 = alloc_data_t(len);
    strcpy(d1->a,str);

    save_data_t("c:\\data2.bin", d1);
    d2 = load_data_t("c:\\data2.bin");
    printf(d2->a);

    free_data_t(d1);
    free_data_t(d2);
    getch();

    return 0;
}

___
не забывайте форматировать код тегами!

Модератор

Последний раз редактировалось Serge_Bliznykov; 03.07.2013 в 11:53.
Sem2001 вне форума Ответить с цитированием
Старый 03.07.2013, 11:50   #13
Ezhik Kihze
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 639
По умолчанию

Цитата:
так размер же должен быть константой.
Для динамических нет.
ICQ: 677936656 Gmail: ekEmbed@gmail.com
Ezhik Kihze вне форума Ответить с цитированием
Старый 03.07.2013, 14:18   #14
Shad0wF1rst
Форумчанин
 
Регистрация: 11.01.2013
Сообщений: 149
По умолчанию

Цитата:
Сообщение от Sem2001 Посмотреть сообщение
Хочу сохранить структуру в двоичный файл. Строковая переменная будет иметь разный текст, разной длины. Неужели нет решения?
А помимо текста какую информацию должна хранить структура. Ведь можно вначале сохранить структуру с этой информацией а потом отдельно текст. Это на мой взгляд наипростейший вариант.

А если говорить о примере, то это все равно не то. Так как в структуре хранится ссылка, а длина ее константа.
Может это и чушь, но это моя чушь и я ее никому не отдам.
Shad0wF1rst вне форума Ответить с цитированием
Старый 03.07.2013, 14:42   #15
Sem2001
 
Регистрация: 26.06.2013
Сообщений: 9
По умолчанию

Любую информацию, главное что бы можно было сохранить динамически меняющийся текст в двоичном файле и обратно его прочесть. Нашел такую статейку но еще не разбирал http://www.codenet.ru/progr/cpp/data-structures.php
Sem2001 вне форума Ответить с цитированием
Старый 03.07.2013, 15:20   #16
Shad0wF1rst
Форумчанин
 
Регистрация: 11.01.2013
Сообщений: 149
По умолчанию

Цитата:
Сообщение от Sem2001 Посмотреть сообщение
Любую информацию, главное что бы можно было сохранить динамически меняющийся текст в двоичном файле и обратно его прочесть. Нашел такую статейку но еще не разбирал http://www.codenet.ru/progr/cpp/data-structures.php
Почитал я эту статью, но по большому счету там размер структуры не меняется. Потому СString все равно содержит определенную структуру данных, в которой имеется указатель. Просто при использовании перегруженного оператора = он также выделяет память, но при этом не изменяя размера своей структуры. По этому это громко сказано структура переменной длины. Но если автору темы такой подход подходит и для него это решение его задачи, это хорошо. Но еще раз повторюсь нельзя поменять размер структуры.
Может это и чушь, но это моя чушь и я ее никому не отдам.
Shad0wF1rst вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как определить размер структуры stpdqstns Общие вопросы C/C++ 10 30.01.2013 19:02
Динамические структуры данных, списковые структуры (надо разобраться что делает программа) _4Alex4_ Помощь студентам 1 14.11.2012 07:39
Написание программ (древовидные структуры, структуры неспециального вида и т.д.) Green Gin Фриланс 2 27.04.2012 15:26
Размер структуры имеет значение? ImmortalAlexSan Общие вопросы C/C++ 0 04.06.2011 16:01
Размер Image изменяется на размер картинки, а сама она рисуется на области первой картинки RPGer Мультимедиа в Delphi 6 20.10.2008 19:54