Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Массив в структуре

34K
19 ноября 2009 года
romikiz
28 / / 26.11.2008
Доброго всем!
Есть структура....
 
Код:
typedef struct query_reading
{
    BYTE start;         //стартовый символ
    BYTE addr;          //сетевой адрес
    BYTE l;         //длина команды
    BYTE cmd;           //массив команд
    BYTE cs[2];     //контрольная сумма
    BYTE stop;          //стоп-символ
}query_reading;

Можно ли изменить размер массива cs в структуре? Скажем
 
Код:
int n = 3;

а вструктуре напишем
 
Код:
BYTE cs[n];

в этом случае естественно вылетает ошибка...нужна альтернатива...
288
19 ноября 2009 года
nikitozz
1.2K / / 09.03.2007
Использовать вектор или изначально выставлять размер массива в максимальлно допустимое значение (не самый лучший вариант).
11
19 ноября 2009 года
oxotnik333
2.9K / / 03.08.2007
Цитата: nikitozz
Использовать вектор или изначально выставлять размер массива в максимальлно допустимое значение (не самый лучший вариант).


Для автора будет самый лучший.
Насколько я понял, он это будет передавать в виде указателя, а если в структуре будет еще один указатель, то данные передадутся не те что надо.

288
19 ноября 2009 года
nikitozz
1.2K / / 09.03.2007
Цитата: oxotnik333
Для автора будет самый лучший.
Насколько я понял, он это будет передавать в виде указателя, а если в структуре будет еще один указатель, то данные передадутся не те что надо.



Ну вообщем да. Судя по структуре я тоже так подумал. Просто жуть как не люблю нечто вроде

 
Код:
char buf[2048];
:)
34K
19 ноября 2009 года
romikiz
28 / / 26.11.2008
С вектором я не работал, спасибо за подсказку посмотрю...
А второй вариант не катит...
Смысл какой...этот массив является контрольной суммой, а в условии сказано:Если код start встречается в поле контрольной суммы, то перед контрольной суммой вставляется нулевой незначащий байт.
Соответственно получается, что если условие соблюдается (т.е. cs == start), то всё ок...а если нет, то незначащий байт идет после контрольной суммы...как его убрать вообще?
288
19 ноября 2009 года
nikitozz
1.2K / / 09.03.2007
Цитата: romikiz

Смысл какой...этот массив является контрольной суммой, а в условии сказано:Если код start встречается в поле контрольной суммы, то перед контрольной суммой вставляется нулевой незначащий байт.
Соответственно получается, что если условие соблюдается (т.е. addr == start), то всё ок...а если нет, то незначащий байт идет после контрольной суммы...как его убрать вообще?



Не совсем понял, а какие трудности вызывает этот незначащий байт?

34K
19 ноября 2009 года
romikiz
28 / / 26.11.2008
Если значащий байт есть, то увеличивается длина сообщения, соответственно и придется пересчитать контрольную сумму...во втором случае(когда start!=cs) это не приемлемо
87
19 ноября 2009 года
Kogrom
2.7K / / 02.02.2008
В структуре все данные одного типа. То есть можно всю структуру заменить на вектор. При подготовке кадра формировать этот вектор. Ну или динамически формировать массив, храня основные данные в структуре без контрольной суммы.

Ещё можно использовать 2 структуры, раз всего 2 вида кадра.
34K
19 ноября 2009 года
romikiz
28 / / 26.11.2008
С векторм сейчас разбираюсь...
Ну а с этим:
Цитата: Kogrom

Ещё можно использовать 2 структуры, раз всего 2 вида кадра.


оно конечно можно, только этих структур сейчас и так 3 шт., две для запроса(запросы разные, вторая структура дополняется полем) и одна для ответа..т.е. получится уже пять структур - это меня не устраивает...

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог