powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Описание структуры с динамическим массивом
13 сообщений из 13, страница 1 из 1
Описание структуры с динамическим массивом
    #34380075
EvolVER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите, как можно описать структуру:
Имеется запись:
int, long, char[неопределенное]

Как можно описать (char ch[]) в виде:

struct
{
int I;
long l;
char ch[];
}

Спасибо.
...
Рейтинг: 0 / 0
Описание структуры с динамическим массивом
    #34380088
EvolVERПодскажите, как можно описать структуру:
Имеется запись:
int, long, char[неопределенное]

Как можно описать (char ch[]) в виде:

struct
{
int I;
long l;
char ch[];
}

Спасибо.

как вы знаете, динамические массивы формируются через указатели и функции выделения памяти.
Поэтому, Ваша структура будет:
Код: plaintext
1.
2.
3.
4.
5.
6.
struct
{
 int I;
 long l;
 char *ch;
}
...
Рейтинг: 0 / 0
Описание структуры с динамическим массивом
    #34380096
EvolVER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Знаю...
здесь другой случай, например, дамп памяти:

03 30 45 46 47 48 31 31 32 33 34 35 00

где 03 30 - int
45 46 47 48 - long
31 31 32 33 34 35 00 - char[]

если поставим указатель, то затрется массив
...
Рейтинг: 0 / 0
Описание структуры с динамическим массивом
    #34380112
ErV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EvolVERЗнаю...
здесь другой случай, например, дамп памяти:

03 30 45 46 47 48 31 31 32 33 34 35 00

где 03 30 - int
45 46 47 48 - long
31 31 32 33 34 35 00 - char[]

если поставим указатель, то затрется массив
А если так:
Код: plaintext
1.
2.
3.
4.
5.
struct{
  int a;
  long b;
  char c[ 0 ];
}
?
или
Код: plaintext
1.
2.
3.
4.
5.
struct{
  int a;
  long b;
  char c[ 65536 ];
}
если компилятор не позволит использовать char c[0]?
...
Рейтинг: 0 / 0
Описание структуры с динамическим массивом
    #34380131
EvolVER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ErV
или
Код: plaintext
1.
2.
3.
4.
5.
struct{
  int a;
  long b;
  char c[ 0 ];
}
если компилятор не позволит использовать char c[0]?

к сожелению не позволит...
...
Рейтинг: 0 / 0
Описание структуры с динамическим массивом
    #34380436
ErV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EvolVER ErV
или
Код: plaintext
1.
2.
3.
4.
5.
struct{
  int a;
  long b;
  char c[ 0 ];
}
если компилятор не позволит использовать char c[0]?

к сожелению не позволит...
Тогда второй вариант можно использовать.
Насколько я понимаю, вы будете брать указатель на дамп и кастить его в указатель на данную структуру...
Соответственно, можно вписать в размер массива любой размер (хоть тот же char c[65536]), так как выход за его (массива) пределы, вроде как, все равно не проверяется...
...
Рейтинг: 0 / 0
Описание структуры с динамическим массивом
    #34380525
EvolVER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
это хорошо, когда статика. А в случае динамики массив неопределен, и если мы укажем [65535] то компилер будет аллокировать память под этот массив, соответственно либо затрутся данные, если мы делаем поверх дампа, либо если таких структур тьма:

struct *massiv;

то памяти сожрет немеренно : на 10 записей уже (65535+8)*10.
...
Рейтинг: 0 / 0
Описание структуры с динамическим массивом
    #34380664
ErV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EvolVERэто хорошо, когда статика. А в случае динамики массив неопределен, и если мы укажем [65535] то компилер будет аллокировать память под этот массив, соответственно либо затрутся данные, если мы делаем поверх дампа, либо если таких структур тьма:

struct *massiv;

то памяти сожрет немеренно : на 10 записей уже (65535+8)*10.
Если вы хотите такую структуру создавать через new, то лучше этого делать не стоит.
Просто по вашим словам я понял так, что вам передается указатель на данные, которые храняться в таком формате и вы хотите превратить её в нечто удобоваримое, вы не упомниали, что сами хотите получить структуру, данные в которой представлены в таком виде.
Для неё надо будет выделять память через malloc, либо создавать процедуру, которая будет брать исходные данные, и запаковывать их в нужный формат, опять же, используя malloc.
Массив из таких структур (я имею в виду через struct *massiv) вы не сделаете по той простой причине, что размер структуры в памяти неизвестен. Нужно будет выделять сырой блок памяти и гулять по нему адресной арифметикой. Либо же использовать struct **masiv, и выделять память отдельно для каждой стуруктуры в нужном для неё размере.

На мой взгляд, будет намного проще хранить данные так, как удобно, но создать метод, который сможет их сохранить в пямять в нужном формате. Например, взяв исходные данные, посчитает размер требуемого блока, выделит память и заполнит блок нужными значениями.
...
Рейтинг: 0 / 0
Описание структуры с динамическим массивом
    #34380767
EvolVER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ErV EvolVERэто хорошо, когда статика. А в случае динамики массив неопределен, и если мы укажем [65535] то компилер будет аллокировать память под этот массив, соответственно либо затрутся данные, если мы делаем поверх дампа, либо если таких структур тьма:

struct *massiv;

то памяти сожрет немеренно : на 10 записей уже (65535+8)*10.
Если вы хотите такую структуру создавать через new, то лучше этого делать не стоит.
Просто по вашим словам я понял так, что вам передается указатель на данные, которые храняться в таком формате и вы хотите превратить её в нечто удобоваримое, вы не упомниали, что сами хотите получить структуру, данные в которой представлены в таком виде.
Для неё надо будет выделять память через malloc, либо создавать процедуру, которая будет брать исходные данные, и запаковывать их в нужный формат, опять же, используя malloc.
Массив из таких структур (я имею в виду через struct *massiv) вы не сделаете по той простой причине, что размер структуры в памяти неизвестен. Нужно будет выделять сырой блок памяти и гулять по нему адресной арифметикой. Либо же использовать struct **masiv, и выделять память отдельно для каждой стуруктуры в нужном для неё размере.

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

Мне хотелось бы создать структуру, которая действительно помогла бы работать с таким блоком памяти, т.е. имея struct, указывающую на блок памяти и работать с ней. Загвостка была только в одном - char[] и если бы можно было это каким-нить образом описать, то проблема была бы решена. Пока решение нашел с использованием структуры и отдельной переменной, указывающей на массив char[]. А думал, что можно ухитриться использовать все в одной струтуре.
...
Рейтинг: 0 / 0
Описание структуры с динамическим массивом
    #34380815
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ErV пишет:
> А если так:
>
> struct{
> int a;
> long b;
> char c[*0*];
> }
>
> ?
> или
>
> struct{
> int a;
> long b;
> char c[*65536*];
> }
>
> если компилятор не позволит использовать char c[0]?

char c[1];
Да именно так.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Описание структуры с динамическим массивом
    #34380861
ErV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EvolVER ErV EvolVERэто хорошо, когда статика. А в случае динамики массив неопределен, и если мы укажем [65535] то компилер будет аллокировать память под этот массив, соответственно либо затрутся данные, если мы делаем поверх дампа, либо если таких структур тьма:

struct *massiv;

то памяти сожрет немеренно : на 10 записей уже (65535+8)*10.
Если вы хотите такую структуру создавать через new, то лучше этого делать не стоит.
Просто по вашим словам я понял так, что вам передается указатель на данные, которые храняться в таком формате и вы хотите превратить её в нечто удобоваримое, вы не упомниали, что сами хотите получить структуру, данные в которой представлены в таком виде.
Для неё надо будет выделять память через malloc, либо создавать процедуру, которая будет брать исходные данные, и запаковывать их в нужный формат, опять же, используя malloc.
Массив из таких структур (я имею в виду через struct *massiv) вы не сделаете по той простой причине, что размер структуры в памяти неизвестен. Нужно будет выделять сырой блок памяти и гулять по нему адресной арифметикой. Либо же использовать struct **masiv, и выделять память отдельно для каждой стуруктуры в нужном для неё размере.

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

Мне хотелось бы создать структуру, которая действительно помогла бы работать с таким блоком памяти, т.е. имея struct, указывающую на блок памяти и работать с ней. Загвостка была только в одном - char[] и если бы можно было это каким-нить образом описать, то проблема была бы решена. Пока решение нашел с использованием структуры и отдельной переменной, указывающей на массив char[]. А думал, что можно ухитриться использовать все в одной струтуре.
Если вы напишите в поле структуры char c[]; то в этом месте будет 4хбайтный указатель (это если 32битная платформа ;)).
Чтобы там сразу был массив, к которому можно было бы обращаться по индексу, и который лежал бы в памяти сразу после первых полей структуры, там должно быть char c[x]; где x - любое число, которое вам нравится.. (как справедливо MasterZiv написал, можно char c[1]; )
...
Рейтинг: 0 / 0
Описание структуры с динамическим массивом
    #34381213
EvolVER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZiv
char c[1];


Согласен, самый короткий вариант.
Спасиб.
...
Рейтинг: 0 / 0
Описание структуры с динамическим массивом
    #34683867
MagAlex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А может лучше просто
Код: plaintext
char c
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Описание структуры с динамическим массивом
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]