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

 
 
> Можно ли в typedef struct описать массив переменной длины, IAR, C, AVR
west329_
сообщение Feb 20 2009, 09:52
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 378
Регистрация: 10-09-07
Из: UKR/Voz
Пользователь №: 30 423



Есть некий протокол который пытаюсь описать структурой типа

Код
typedef struct TMainS
  {
    unsigned char   Start;
    unsigned long   Adata;
    unsigned int      Bdata;
    unsigned char   Cdata[var];
    unsigned int      Ddata;
    unsigned int      Edata;

  } T_MainS_Header;


Подскажите как в таких случаях поступат если, Cdata имеет переменную длину.

Перед присваиваем типов можно легко найти значение var.
Интересует доступ к полям Ddata и Edata, после присваивания типа MainS->Ddata или MainS->Edata.

Возможно ли такое решение, в книге по С такого ненашол, компилятор упорно ругается на Cdata, говорит что надо константа для var, и я с ним согласен, но есть ли другие решения ?

Сообщение отредактировал west329_ - Feb 20 2009, 09:57
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
west329_
сообщение Feb 25 2009, 10:20
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 378
Регистрация: 10-09-07
Из: UKR/Voz
Пользователь №: 30 423



Всё работает как надо, благодарю за помощь. За ради интереса, собрал несколько аналогичных функций.
Код
char* strstr_P(const char* s1, flash char* s2)
{
    size_t len;
    len = strlen_P(s2);
    char *buf;  
    buf = malloc(len);
    strncpy_P(buf, s2, len);
    return  strstr(s1, buf);
}

самый прожорлевый вариант. прибавил сразу ~240kb
Код
char* strstr_P(const char* s1, flash char* s2)
{
    #define MAX_STR_LEN    30            // äîïóñòèì 30    
    char buf[MAX_STR_LEN];
    char len = strlen_P(s2);
    strncpy_P(buf, s2, len);     // êîïèðóåì flash â buf
    buf[len] = '\0';
   return  strstr(s1, buf)
}

немного меньше, но всёравно порядка 150кб
ваш код самый маленьки оказался, порядка 100кб
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Feb 25 2009, 11:06
Сообщение #3


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(west329_ @ Feb 25 2009, 13:20) *
Всё работает как надо, благодарю за помощь. За ради интереса, собрал несколько аналогичных функций.
Эксперементировать надо с умом (простите, но гляда на то что Вы пишите у меня сердце кровью обливается).
Купите книжку по СИ и перечитайте её несколько раз - эти трудозатраты с лихвой окупятся.
Для общего развития:
1. На каждый malloc() должен быть свой free().
2. strncpy(s1,s2,n) копирует строку s2 в s1, но не более n символов, поэтому нас не интересует длина s2,
т.к. любая строка заканчивается '\0', а приёмный буфер (строка s1) имеет максимальную длину не меньше n.
И ещё, прикинте сколько машинных циклов добавят вызовы этих процедур: malloc() и free().
Да, можно еще немного оптимизировать:
Код
char* strstr_P(const char* s1, flash char* s2)
{
    #define MAX_STR_LEN    30
    char buf[MAX_STR_LEN];
    buf[MAX_STR_LEN - 1] = '\0';
    return  strstr(s1, strncpy_P(buf, s2, MAX_STR_LEN-1));
}


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- west329_   Можно ли в typedef struct описать массив переменной длины   Feb 20 2009, 09:52
- - ARV   Cdata делайте указателем, не забывая выделять памя...   Feb 20 2009, 09:58
- - sergeeff   Цитата(west329_ @ Feb 20 2009, 13:52) Под...   Feb 20 2009, 10:04
- - Сергей Борщ   Цитата(west329_ @ Feb 20 2009, 11:52) Под...   Feb 20 2009, 11:01
|- - rezident   Цитата(Сергей Борщ @ Feb 20 2009, 16:01) ...   Feb 20 2009, 14:06
|- - Сергей Борщ   Цитата(rezident @ Feb 20 2009, 16:06) а в...   Feb 20 2009, 19:12
- - west329_   Благодар за подсказку. Понятно как действовать дал...   Feb 20 2009, 11:54
- - Rst7   Чисто с прагматической точки зрения я бы положил в...   Feb 20 2009, 19:32
- - west329_   Если забирать данные с Cdata через указатель, како...   Feb 21 2009, 08:25
|- - demiurg_spb   Цитата(west329_ @ Feb 21 2009, 11:25) Есл...   Feb 21 2009, 10:01
|- - sergeeff   Цитата(west329_ @ Feb 21 2009, 12:25) Есл...   Feb 21 2009, 16:59
|- - demiurg_spb   Цитата(sergeeff @ Feb 21 2009, 19:59) Ука...   Feb 21 2009, 17:35
- - Rst7   ЦитатаПо стандарту на язык СИ "размерность...   Feb 21 2009, 17:57
|- - zltigo   Цитата(Rst7 @ Feb 21 2009, 20:57) До появ...   Feb 22 2009, 06:52
|- - sergeeff   Цитата(Rst7 @ Feb 21 2009, 21:57) Да, так...   Feb 22 2009, 11:55
- - Rst7   Цитатав том-же реалмоде x86 Ну да. Правда, самый ...   Feb 22 2009, 07:26
|- - demiurg_spb   Да и на x51 была возможность косвенной адресации ч...   Feb 22 2009, 08:32
|- - ReAl   Цитата(demiurg_spb @ Feb 22 2009, 10:32) ...   Feb 22 2009, 20:51
|- - demiurg_spb   Цитата(ReAl @ Feb 22 2009, 23:51) Просто ...   Feb 22 2009, 21:22
|- - ReAl   Цитата(demiurg_spb @ Feb 22 2009, 23:22) ...   Feb 22 2009, 21:39
|- - demiurg_spb   Цитата(ReAl @ Feb 23 2009, 00:39) Не поня...   Feb 23 2009, 08:19
|- - west329_   Цитата(demiurg_spb @ Feb 23 2009, 11:19) ...   Feb 23 2009, 11:36
|- - sergeeff   Цитата(west329_ @ Feb 23 2009, 14:36) а у...   Feb 23 2009, 11:48
||- - demiurg_spb   Цитата(sergeeff @ Feb 23 2009, 14:48) А а...   Feb 23 2009, 20:34
|- - Сергей Борщ   Цитата(west329_ @ Feb 23 2009, 13:36) а у...   Feb 23 2009, 12:01
- - Rst7   ЦитатаРазность между двумя указателями - ptrdiff_t...   Feb 22 2009, 12:04
- - west329_   CODE/* - LIMITS.H - Integral ANSI elemen...   Feb 23 2009, 06:39
- - west329_   Незнал, чесно признаюсь думал, что это описывается...   Feb 23 2009, 12:21
|- - sergeeff   Цитата(west329_ @ Feb 23 2009, 15:21) Нез...   Feb 23 2009, 12:33
- - west329_   ..Указатель — это переменная, значением кото...   Feb 23 2009, 13:40
|- - sergeeff   Цитата(west329_ @ Feb 23 2009, 16:40) ..У...   Feb 23 2009, 15:05
- - sergeeff   Очень жаль, если у вас до сих пор нет понимания ра...   Feb 24 2009, 07:33
|- - demiurg_spb   Цитата(sergeeff @ Feb 24 2009, 10:33) Оче...   Feb 24 2009, 07:42
- - sergeeff   Типун вам на язык и долгих лет жизни. В двоичной...   Feb 24 2009, 09:21
|- - demiurg_spb   Цитата(sergeeff @ Feb 24 2009, 12:21) Тип...   Feb 24 2009, 09:38
- - sergeeff   Цитатаэто уже надо задуматься Задумываться - поле...   Feb 24 2009, 09:53
- - west329_   Подскажите как правильно поступить, хочу использов...   Feb 24 2009, 10:04
|- - demiurg_spb   Цитата(west329_ @ Feb 24 2009, 13:04) Обь...   Feb 24 2009, 10:38
- - west329_   В чем тогда отличие unsigned char от char сори, п...   Feb 24 2009, 10:48
|- - MrYuran   Цитата(west329_ @ Feb 24 2009, 13:48) В ч...   Feb 24 2009, 10:55
|- - demiurg_spb   Цитата(west329_ @ Feb 24 2009, 13:48) ......   Feb 24 2009, 11:09
|- - zltigo   Цитата(west329_ @ Feb 24 2009, 13:48) а т...   Feb 24 2009, 11:12
||- - demiurg_spb   Цитата(zltigo @ Feb 24 2009, 14:12) Ну и ...   Feb 24 2009, 11:24
|||- - zltigo   Цитата(demiurg_spb @ Feb 24 2009, 14:24) ...   Feb 24 2009, 12:08
|||- - demiurg_spb   Цитата(zltigo @ Feb 24 2009, 15:08) Вроде...   Feb 24 2009, 12:34
|||- - gotty   Цитата(demiurg_spb @ Feb 24 2009, 14:34) ...   Feb 24 2009, 12:50
|||- - zltigo   Цитата(gotty @ Feb 24 2009, 15:50) Тут от...   Feb 24 2009, 13:20
|||- - demiurg_spb   Цитата(gotty @ Feb 24 2009, 15:50) Тут от...   Feb 24 2009, 13:38
||- - Сергей Борщ   Цитата(zltigo @ Feb 24 2009, 13:12) Ну и ...   Feb 24 2009, 12:24
|- - xemul   Цитата(west329_ @ Feb 24 2009, 13:48) Код...   Feb 24 2009, 11:21
- - west329_   Код__flash char *test_ = "hello"; __fla...   Feb 24 2009, 11:38
|- - gotty   Цитата(west329_ @ Feb 24 2009, 13:38) Код...   Feb 24 2009, 11:41
|- - demiurg_spb   Цитата(west329_ @ Feb 24 2009, 14:38) [co...   Feb 24 2009, 11:42
|- - gotty   Цитата(demiurg_spb @ Feb 24 2009, 13:42) ...   Feb 24 2009, 11:47
|- - demiurg_spb   Я через минуту раздумий удалил этот пример. Вы опе...   Feb 24 2009, 11:49
- - west329_   Цель сделать поиск в буфере строки которая сидит в...   Feb 24 2009, 12:05
|- - demiurg_spb   Цитата(west329_ @ Feb 24 2009, 15:05) Цел...   Feb 24 2009, 12:07
- - west329_   Код__flash char test_[] = "hello...   Feb 24 2009, 14:14
|- - demiurg_spb   Цитата(west329_ @ Feb 24 2009, 17:14) Это...   Feb 24 2009, 14:22
- - west329_   Код__x_z int strcatstrncmpstrncmp(const void *...   Feb 25 2009, 06:12
|- - demiurg_spb   Цитата(west329_ @ Feb 25 2009, 09:12) Ана...   Feb 25 2009, 08:05
|- - gotty   Цитата(west329_ @ Feb 25 2009, 12:20) Код...   Feb 25 2009, 10:53
- - A. Fig Lee   то, что возвращает malloc() правильные пацаны пров...   Feb 26 2009, 02:10


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

 


RSS Текстовая версия Сейчас: 25th August 2025 - 01:32
Рейтинг@Mail.ru


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