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

 
 
> структуры в С, копирование в байтовый массив
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
Ответов
sergeeff
сообщение Apr 27 2007, 21:01
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



К сведению: union - платформозависимая штука и в плане переносимости - большой вопрос.

Второе наблюдение по жизни: простое приведение одного типа указателя к другому это хорошо, если при этом не рарушается требования по выравниванию адресов (что имеет место в случае ARM'ов, например).

Так что в каждом конкретном случае надо сначала подумать, что ты хочешь, чтобы процессор сделал, а потом уже это реализовать с учетом его архитектурных особенностей (мой приятель в институте говорил в таких случаях: поиграем в компьютер, т.е. посмотрим на программу "глазами" компьютера - очень полезно).
Go to the top of the page
 
+Quote Post
zltigo
сообщение Apr 27 2007, 21:14
Сообщение #3


Гуру
******

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



Цитата(sergeeff @ Apr 27 2007, 21:01) *
К сведению:

К чьему сведению? Это я спрашиваю по причине того, что Ваш пост несколько выбивается из темы и не совсем понятен.
Цитата
union - платформозависимая штука и в плане переносимости - большой вопрос.

Прошу огласить проблемы с зависимостью и непереносимостью.
Цитата
если при этом не рарушается требования по выравниванию адресов (что имеет место в случае ARM'ов, например).

В плане обсуждаемой "проблемы" это не существенно, поскольку начальные адреса структур и массивов всегда выравнены. Про изощренные способы доступа к элементам речь пока не идет.


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


Местный
***

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



Цитата(zltigo @ Apr 27 2007, 22:14) *
В плане обсуждаемой "проблемы" это не существенно, поскольку начальные адреса структур и массивов всегда выравнены. Про изощренные способы доступа к элементам речь пока не идет.


1. Проблемы когда не фсе функции стандарта языка поддерживаются в компиляторах - бывают.
2. Простое совмещение адресного пространства в памяти - массивов и структур - гораздо красивее и правильнее чем примитивное копирование - хотябы с точки зрения экономии ресурсов и памяти программ (процедура memcpy библиотечная и занимает эн-ое количество байт).
Что мы тут из пустого в порожнее-то, а?
Go to the top of the page
 
+Quote Post
zltigo
сообщение Apr 27 2007, 23:05
Сообщение #5


Гуру
******

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



Цитата(lks @ Apr 27 2007, 22:27) *
Проблемы когда не фсе функции стандарта языка поддерживаются в компиляторах - бывают.

Всему есть предел, те кто не поддерживают чего-то уже не существуют на рынке.
Если есть пример живого компилятора - в студию. Искать его очень просто - у него в прототипе функции memcpy() второй аргумент должен отличаться от (const void *). Я за двадцать с лишним лет таких не встречал.
Цитата
Простое совмещение адресного пространства в памяти - массивов и структур - гораздо красивее и правильнее чем примитивное копирование

Причем здесь красивее/не красивее? Повторяюсь - это две совершенно разные вещи не заменяющие друг друга. Как передача аргумента по значению не лучше/хуже и не красивее/уродливее передачи аргумента по ссылке. Используется то, что нужно в данный момент.
Цитата
Что мы тут из пустого в порожнее-то, а?

Лично я на этом закончил, а разговоры разговаривал исключительно по причине того, что раздел с этой темой называется "В помощь начинающему". И в этом месте мне кажутся особо неуместными мутные повествования о каких-то "некоторых компиляторах" и извращениях.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
lks
сообщение Apr 28 2007, 08:12
Сообщение #6


Местный
***

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



Цитата(zltigo @ Apr 28 2007, 00:05) *
Лично я на этом закончил,


Могли бы и не начинать.

to all:

А всеже интересно, когда указываете на структуру через амперсанд, какой тип данных должен иметь указатель? (пусть даже на для компилятора ИАР).
Я пробовал сделать это на другом компиляторе у меня тоже не получилось.
Умные люди подсказывают что тип указателя должен быть void.
По идее в момент инициализации данных можно описать массив указателей типа void и потом амперсанд структуры присвоить первому элементу этого массива.
Go to the top of the page
 
+Quote Post
dxp
сообщение Apr 28 2007, 09:56
Сообщение #7


Adept
******

Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



Цитата(lks @ Apr 28 2007, 12:12) *
А всеже интересно, когда указываете на структуру через амперсанд, какой тип данных должен иметь указатель?

Поясните пожалуйста, что Вы подразумеваете под "указанием на структуру через амперсанд"?

Цитата(lks @ Apr 28 2007, 12:12) *
(пусть даже на для компилятора ИАР).

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

Цитата(lks @ Apr 28 2007, 12:12) *
Умные люди подсказывают что тип указателя должен быть void.

Как это? Приведите пожалуйста пример?

Цитата(lks @ Apr 28 2007, 12:12) *
По идее в момент инициализации данных можно описать массив указателей типа void и потом амперсанд структуры присвоить первому элементу этого массива.

Что такое "амперсанд структуры"? Это новый термин в языке? Покажите лучше, код, который имеете в виду, возможно, так будет понятнее и однозначее.


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
lks
сообщение Apr 28 2007, 11:11
Сообщение #8


Местный
***

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



Цитата(dxp @ Apr 28 2007, 10:56) *
Поясните пожалуйста, что Вы подразумеваете под "указанием на структуру через амперсанд"?
От компилятора тут ничего зависеть не должно - это правила языка, компилятор, если он соответсвует Стандарту, должен выполнять предсказуемые действия. Иначе такой компилятор фтопку.
Как это? Приведите пожалуйста пример?
Что такое "амперсанд структуры"? Это новый термин в языке? Покажите лучше, код, который имеете в виду, возможно, так будет понятнее и однозначее.




unsigned char *ptr;
struct BootSectorStruct
{
unsigned char JmpCmd[3];
unsigned char OEMName[8];
};

struct BootSectorStruct BootSector = {0xEB, 0x00, 0x90, "HaloWrld"};

ptr = &BootSector;
for (i=0;i<11;i++)
{
MMCWRData[i] = *ptr;
ptr++;
}

Хорошо, поясняю.

Значок & - называется амперсанд, или оператор указания.
Когда пишу "амперсанд структуры" - подразумеваю - &BootSector, т.е. получение адреса по которому располагается данные описанные в структуре.
Этот пример кода взят (судя по всему) из учебника - автором темы.
Никто не сомневается что он должен работать.
Автор темы попытался применить его в ИАР компиляторе - результат: не работатет.
Вопрос в том: почему он не работатет и развивая мысль дальше - неплохо бы сделать совмещение начала адресов массива и структуры в памяти - тогда необходимость копирования данных из одного места в другое автоматически отпадает.

Так лучше?
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Apr 28 2007, 12:46
Сообщение #9


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(lks @ Apr 28 2007, 10:11) *
Вопрос в том: почему он не работатет и развивая мысль дальше - неплохо бы сделать совмещение начала адресов массива и структуры в памяти - тогда необходимость копирования данных из одного места в другое автоматически отпадает.
Выделите наконец полчаса и прочитайте у Кернигана и Ритчи главу про указатели. Тогда вы поймете, что компилятор ругается правильно, узнаете какой тип имеет &BootSector, узнаете почему компилятор проглотит ptr = &BootSector; если ptr объявлен как void*, и узнаете почему в этом случае компилятор выругается на MMCWRData[ i ] = *ptr. Вы поймете что общего у массивов и указателей и как правильно объявив указатель можно получить совмещение начала адресов массива и структуры в памяти. Ведь, судя по вашим сообщениям в этой ветке, вы совершенно не имеете понятия об указателях. Но почему вы хотите, чтобы кто-то потратил гораздо больше времени, пересказывая тут эту главу для вас тут??? Если вам что-то будет непонятно у Кернигана и Ритчи - спрашивайте, с удовольствием объясним. Но сделайте сначала сами элементарное усилие.

P.S. Какой, нафиг, пример из учебника, если судя по названию массива идет работа с MultiMedia Card?


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
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
|- - 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
|- - 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, 15:21
|- - lks   Цитата(rezident @ Apr 29 2007, 16:21) Ну ...   Apr 29 2007, 16:43
|- - rezident   Цитата(lks @ Apr 29 2007, 19:34) Если я н...   Apr 29 2007, 16:49
|- - zltigo   Цитата(lks @ Apr 29 2007, 16:34) Если я н...   Apr 29 2007, 17:10
|- - lks   Цитата(zltigo @ Apr 29 2007, 18:10) Для т...   Apr 29 2007, 17:25
|- - zltigo   Цитата(lks @ Apr 29 2007, 17:25) Список -...   Apr 29 2007, 17:47
- - 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
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 10:05
Рейтинг@Mail.ru


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