реклама на сайте
подробности

 
 
> структуры в С, копирование в байтовый массив
tolik_zp
сообщение Apr 26 2007, 16:05
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 127
Регистрация: 2-08-06
Пользователь №: 19 265



Имеется структура с элементами различных типов и массив типа char
вопрос: как все содержимое структуры скопировать в массив?

попробовал инициализировать указатель типа char на структуру и в цикле переписать - не проходит
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
rezident
сообщение Apr 29 2007, 15:21
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(lks)
Когда вы извлекаете адрес переменной с помощью оператора амперсанд - вы получаете адрес переменной. Вы знаете тип переменной?
Простая процедура.
Этот тип не требует описание его в "хидере".
Это не термин - это просто обычный указатель, поддерживаемый стандартными процедурами.

Ну я уже не знаю как вам объяснять. huh.gif На гайках и автомобилях не понимаете, на яблоки, арбузы и семячки перейти что ли? smile.gif
Указатель в СИ это такая же абстракция как и структура. Поведение указателя после компиляции программы в машинные коды, выполняемые CPU, зависит от конкретного CPU. Если CPU обращается к памяти побайтно, то нет никаких проблем, чтобы адресовать каждый байт. Но если разрядность шины памяти шире 8 бит, то возникают нюансы. На языке ассемблера разница выразится, например в том, что вместо команды MOV.W 0x8(R10), R14 будет использоваться команда MOV.B 0x8(R10), R14. В 16-битной архитектуре такая команда позволяет получить доступ к байту, в отличие от доступа к слову "по-умолчанию". Если в такой системе структура будет иметь выравнивание на байт, то есть вероятность 50/50, что вы обязательно налетите на глюки при использовании "словного" (16-битного) доступа к такой структуре. Причем это даже при доступе к массиву однородных данных относится. Пример.
unsigned char mas[5]={0x00, 0x01, 0x02, 0x03, 0x04};
Вне зависимости от архитектуры и способа доступа к памяти байты могут расположится в памяти в порядке как 0x00, 0x01, 0x02, 0x03, 0x04, это нам гарантирует стандарт СИ. Однако извлечение их из памяти будет зависеть от описания способа доступа к памяти, т.к. в физической памяти первый байт массива может расположиться по нечетному адресу, который 16-разрядный CPU напрямую адресовать не может, т.к. у него счетчик (PC) кратно слову (2 байтам) инкрементируется, а не кратно 1 байту. Тогда при извлечении из физической памяти такого массива с 16-разядным доступом мы можем получить двоякий результат 0x00XX, 0x0201, 0x0403 или 0x0100, 0x0302, 0xXX04. Вот к чему может привести свободное манипулирование типами данных.
Go to the top of the page
 
+Quote Post
lks
сообщение Apr 29 2007, 16:43
Сообщение #3


Местный
***

Группа: Новичок
Сообщений: 493
Регистрация: 18-06-06
Пользователь №: 18 143



Цитата(rezident @ Apr 29 2007, 16:21) *
Ну я уже не знаю как вам объяснять. huh.gif На гайках и автомобилях не понимаете, на яблоки, арбузы и семячки перейти что ли? smile.gif
Указатель в СИ это такая же абстракция как и структура.


На семячках вы еще не упражнялись. smile.gif

Если я напишу массив указателей unsigned char *buf[100]; - это абстракция?
Если я напишу struct и перечислю список переменных - это тоже?
Вообще-то компилятор выделит память под эти переменные - а память стоит денег - значит вещи вполне реальные. smile.gif




Цитата(zltigo @ Apr 29 2007, 16:54) *
Обалдеть sad.gif. Все, граждане-господа-товарищи, я "пас" sad.gif.
Возраст, нервы...


Если бы память позволяла - я бы поставил scanf со списком переменных и читал бы все из буфера, но это занимает памяти еще больше.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Apr 29 2007, 17:10
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(lks @ Apr 29 2007, 16:34) *
Если я напишу struct и перечислю список переменных - это тоже?
Вообще-то компилятор выделит память под эти переменные - а память стоит денег - значит вещи вполне реальные. smile.gif

О какие тараканы в голове. Не выделит, если не будете перечислять список переменных.
Объявление структуры, не содержащей списка переменных, не резервирует памяти, только описывает шаблон. Если структура имеет тег, то этим тегом далее можно пользоваться при определении структурных объектов - это то, что надо.
P.S.
Для тех, кто в танке - список переменных это то, что после закрывающейся фигурной скобки, а не внутри скобок.









Цитата(rezident @ Apr 29 2007, 16:49) *
Пожалуй мне тоже придется последовать примеру zltigo и самоустраниться...

Не смог я smile.gif страсть к естествознанию не позволила smile.gif


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
lks
сообщение Apr 29 2007, 17:25
Сообщение #5


Местный
***

Группа: Новичок
Сообщений: 493
Регистрация: 18-06-06
Пользователь №: 18 143



Цитата(zltigo @ Apr 29 2007, 18:10) *
Для тех, кто в танке - список переменных это то, что после закрывающейся фигурной скобки, а не внутри скобок.


Список - это не только когда после фигурных скобок в структуре.
Смотрите шире.
Будем обсуждать варианты превода разных источников?
Go to the top of the page
 
+Quote Post
zltigo
сообщение Apr 29 2007, 17:47
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(lks @ Apr 29 2007, 17:25) *
Список - это не только когда после фигурных скобок в структуре.

Не "список" а "список переменных", однако.
Цитата
Будем обсуждать варианты превода разных источников?

Первоисточник он один.
Варианты перевода, можно и пообсуждать (у меня настроение сегодня smile.gif )
Итак, пререводим. То, 'что в скобках' называется - "structure members" лично мне встречались варианты "члены структуры" и "'элементы структуры" больше по душе "элементы", но против буквального "членов" не возражаю smile.gif.

Ваш ход.

И, главное ,придавая филологический уклон беседе, не забудьте, что НЕ ВЫДЕЛЯЕТ память компилятор под структуру, если его об этом не попросить.
Запомнили?


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- tolik_zp   структуры в С   Apr 26 2007, 16:05
- - o-henry   код в студию   Apr 26 2007, 16:10
|- - tolik_zp   Цитата(o-henry @ Apr 26 2007, 16:10)...   Apr 26 2007, 16:16
|- - o-henry   а приведение типов кто делать будет? ptr = (char*...   Apr 26 2007, 16:30
|- - dxp   Цитата(tolik_zp @ Apr 26 2007, 20:16) вот...   Apr 26 2007, 16:32
|- - lks   Попробуйте указать на переменную JmpCmd - т.е. ам...   Apr 26 2007, 20:30
|- - Сергей Борщ   Цитата(lks @ Apr 26 2007, 19:30) Попробуй...   Apr 26 2007, 22:25
||- - lks   Цитата(Сергей Борщ @ Apr 26 2007, 23:25) ...   Apr 26 2007, 23:10
||- - Сергей Борщ   Цитата(lks @ Apr 26 2007, 22:10) Вопрос г...   Apr 27 2007, 00:52
|- - zltigo   Цитата(lks @ Apr 26 2007, 20:30) а на пер...   Apr 26 2007, 23:19
- - v_shamaev   Цитата(tolik_zp @ Apr 26 2007, 17:05) Име...   Apr 26 2007, 16:10
- - zltigo   Цитата(tolik_zp @ Apr 26 2007, 16:05) поп...   Apr 26 2007, 16:16
- - rezident   Об чем сыр-бор? Явное приведение типов всяко лучше...   Apr 27 2007, 01:40
|- - tolik_zp   всем спасибо, работает. век живи - век rtfm   Apr 27 2007, 12:23
|- - lks   Цитата(tolik_zp @ Apr 27 2007, 13:23) все...   Apr 27 2007, 18:45
|- - zltigo   Цитата(lks @ Apr 27 2007, 18:45) Приведит...   Apr 27 2007, 18:57
|- - lks   Цитата(zltigo @ Apr 27 2007, 19:57) Для с...   Apr 27 2007, 19:53
|- - zltigo   Цитата(lks @ Apr 27 2007, 19:53) Ну может...   Apr 27 2007, 20:06
- - sergeeff   К сведению: union - платформозависимая штука и в п...   Apr 27 2007, 21:01
|- - zltigo   Цитата(sergeeff @ Apr 27 2007, 21:01) К с...   Apr 27 2007, 21:14
|- - lks   Цитата(zltigo @ Apr 27 2007, 22:14) В пла...   Apr 27 2007, 22:27
|- - zltigo   Цитата(lks @ Apr 27 2007, 22:27) Проблемы...   Apr 27 2007, 23:05
|- - lks   Цитата(zltigo @ Apr 28 2007, 00:05) Лично...   Apr 28 2007, 08:12
|- - dxp   Цитата(lks @ Apr 28 2007, 12:12) А всеже ...   Apr 28 2007, 09:56
|- - lks   Цитата(dxp @ Apr 28 2007, 10:56) Поясните...   Apr 28 2007, 11:11
|- - o-henry   Цитата(lks @ Apr 28 2007, 10:11) Этот при...   Apr 28 2007, 11:53
||- - lks   Цитата(o-henry @ Apr 28 2007, 12:53)...   Apr 28 2007, 12:58
||- - Сергей Борщ   Цитата(lks @ Apr 28 2007, 11:58) Может ну...   Apr 28 2007, 13:28
|- - zltigo   Цитата(lks @ Apr 28 2007, 11:11) Никто не...   Apr 28 2007, 12:09
|- - Сергей Борщ   Цитата(lks @ Apr 28 2007, 10:11) Вопрос в...   Apr 28 2007, 12:46
|- - dxp   Цитата(lks @ Apr 28 2007, 15:11) Значок ...   Apr 28 2007, 14:01
|- - lks   Цитата(dxp @ Apr 28 2007, 15:01) Неверно....   Apr 28 2007, 15:22
|- - dxp   Цитата(lks @ Apr 28 2007, 19:22) Вот так,...   Apr 28 2007, 17:21
||- - lks   Цитата(dxp @ Apr 28 2007, 18:21) P.P.S. Ч...   Apr 28 2007, 21:34
|||- - rezident   Цитата(lks @ Apr 29 2007, 00:34) typedef ...   Apr 28 2007, 22:19
||- - lks   Цитата(dxp @ Apr 28 2007, 18:21) Какой пр...   Apr 28 2007, 22:26
||- - Legotron   Цитата(lks @ Apr 28 2007, 23:26) И все же...   Apr 28 2007, 22:58
|||- - lks   Цитата(Legotron @ Apr 28 2007, 23:58) Я д...   Apr 29 2007, 14:26
||||- - zltigo   Цитата(lks @ Apr 29 2007, 14:26) Возможно...   Apr 29 2007, 15:29
||||- - lks   Цитата(zltigo @ Apr 29 2007, 16:29) Подск...   Apr 29 2007, 15:49
||||- - Сергей Борщ   Ладно, я еще поприкалываюсь Цитата(lks @ Apr ...   Apr 29 2007, 18:02
||||- - lks   Цитата(Сергей Борщ @ Apr 29 2007, 19:02) ...   Apr 29 2007, 19:24
||||- - zltigo   Цитата(lks @ Apr 29 2007, 19:24) Что тоже...   Apr 29 2007, 19:36
|||||- - lks   Цитата(zltigo @ Apr 29 2007, 20:36) Блеск...   Apr 29 2007, 19:46
|||||- - zltigo   Цитата(lks @ Apr 29 2007, 19:46) Да нет, ...   Apr 29 2007, 20:01
||||- - Сергей Борщ   Цитата(lks @ Apr 29 2007, 19:24) В чем пр...   Apr 29 2007, 21:03
||||- - lks   Цитата(Сергей Борщ @ Apr 29 2007, 22:03) ...   Apr 29 2007, 21:31
||||- - zltigo   Цитата(lks @ Apr 29 2007, 21:31) книжку п...   Apr 29 2007, 21:41
||||- - lks   Цитата(zltigo @ Apr 29 2007, 22:41) За яз...   Apr 29 2007, 21:50
||||- - zltigo   Цитата(lks @ Apr 29 2007, 21:50) А что вы...   Apr 29 2007, 22:04
||||- - Legotron   Уважаемые собеседники! Не составит ли вам бол...   Apr 29 2007, 22:36
||||- - zltigo   Цитата(Legotron @ Apr 29 2007, 22:36) еще...   Apr 29 2007, 22:56
|||- - Legotron   Цитата(Legotron @ Apr 28 2007, 23:58) У м...   Apr 29 2007, 15:44
|||- - zltigo   Цитата(Legotron @ Apr 29 2007, 15:44) Ptr...   Apr 29 2007, 15:54
|||- - Legotron   Цитата(zltigo @ Apr 29 2007, 16:51) ...   Apr 29 2007, 15:56
|||- - zltigo   Цитата(Legotron @ Apr 29 2007, 15:56) why...   Apr 29 2007, 16:06
|||- - Legotron   Цитата(zltigo @ Apr 29 2007, 17:06) Потом...   Apr 29 2007, 16:23
||- - rezident   Цитата(lks @ Apr 29 2007, 01:26) Непонятн...   Apr 29 2007, 00:35
|- - rezident   Цитата(lks @ Apr 28 2007, 18:22) Ну тогда...   Apr 28 2007, 17:48
- - o-henry   Уважаемый tolik_zp! На Ваш вопрос Вы уже полу...   Apr 28 2007, 15:40
|- - lks   Цитата(o-henry @ Apr 28 2007, 16:40)...   Apr 28 2007, 15:47
|- - zltigo   Цитата(lks @ Apr 28 2007, 15:47) А я не н...   Apr 28 2007, 15:57
|- - lks   Цитата(zltigo @ Apr 28 2007, 16:57) Тем х...   Apr 28 2007, 16:58
|- - zltigo   Цитата(lks @ Apr 28 2007, 16:58) По сущес...   Apr 28 2007, 17:10
- - Vladimir Chekin   Дежа-вю... Юзер: - Я решил сварить яйцо в микровол...   Apr 28 2007, 19:00
- - rezident   Цитата(Vladimir Chekin)Написать или заказать напис...   Apr 28 2007, 19:04
|- - rezident   Цитата(lks @ Apr 29 2007, 19:34) Если я н...   Apr 29 2007, 16:49
- - forever failure   Неужели Дохтур Туамосес ?   Apr 29 2007, 19:35
- - Vladimir Chekin   rezident >> У вас есть адрес Доктора ТуамОс...   Apr 30 2007, 03:24
- - Vladimir Chekin   Может и не в кассу, имхо вот в этой короткой фразе...   Apr 30 2007, 04:28
- - zltigo   Цитата(Vladimir Chekin @ Apr 30 2007, 04...   Apr 30 2007, 13:30
- - Dog Pawlowa   Цитата(zltigo @ Apr 30 2007, 13:30) Описа...   Apr 30 2007, 17:16
- - zltigo   Цитата(Dog Pawlowa @ Apr 30 2007, 17:16) ...   Apr 30 2007, 17:28


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 09:21
Рейтинг@Mail.ru


Страница сгенерированна за 0.0155 секунд с 7
ELECTRONIX ©2004-2016