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

 
 
> Вопрос по языку С, Обращение к массиву внутри массива структур
sherr
сообщение Nov 29 2014, 16:53
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 257
Регистрация: 10-06-06
Из: Ставрополь
Пользователь №: 17 955



Изобретаю очередной велосипед - создаю несложный GUI (ARM GCC)

Возник такой вопрос

Есть массив структур типа :typedef struct {
unsigned short widget;
unsigned short x;
unsigned short y;
unsigned short width;
unsigned short height;
unsigned char name[12];
unsigned short font;
unsigned short color;
unsigned short color_text;
unsigned short color_inact;
unsigned short color_alert;
unsigned short id;
unsigned short viz;
unsigned short click;
unsigned short group;
unsigned short child;
unsigned short value;
unsigned short attr1;
unsigned short attr2;

} gui_str ;
..............
gui_str gui[128];

Как обратиться к элементу name[12] из функции
void CreateButton(unsigned short x,unsigned short y,unsigned char*str)

Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
megajohn
сообщение Nov 29 2014, 17:05
Сообщение #2


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

Группа: Свой
Сообщений: 1 080
Регистрация: 16-11-04
Из: СПб
Пользователь №: 1 143



void CreateButton(unsigned short x,unsigned short y,unsigned char*str)
{
strncpy( gui[i].name, str, 11 ); // что так
strncpy( &gui[i].name[0], str, 11 ); // что сяк
}


--------------------
Марс - единственная планета, полностью населенная роботами (около 7 штук).
Go to the top of the page
 
+Quote Post
sherr
сообщение Nov 29 2014, 17:21
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 257
Регистрация: 10-06-06
Из: Ставрополь
Пользователь №: 17 955



А вот еще такой вопрос -
пусть функция
принимает строку
(это альтернативный вариант)
void CreateButton (unsigned char*str)
.......
CreateButton("x_40 y_80 color_black name_button1")

а в .h файле объявлено #define black 0x0000

Можно ли обьяснить препроцессору чтобы он
подставил значение внутрь строки или
как то еще выкрутиться ?
Go to the top of the page
 
+Quote Post
megajohn
сообщение Nov 29 2014, 17:43
Сообщение #4


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

Группа: Свой
Сообщений: 1 080
Регистрация: 16-11-04
Из: СПб
Пользователь №: 1 143



Цитата(sherr @ Nov 29 2014, 20:21) *
А вот еще такой вопрос -
пусть функция
принимает строку
(это альтернативный вариант)

.......
CreateButton("x_40 y_80 color_black name_button1")

а в .h файле объявлено #define black 0x0000

Можно ли обьяснить препроцессору чтобы он
подставил значение внутрь строки или
как то еще выкрутиться ?


это излишне, но если очень хочется то лучше упростить
CreateButton( "40 80 black button1")
и
void CreateButton (unsigned char*str)
{
int x, y, color[20], name[20];

if( str && ( 4 == sscanf( str, "%u%u%s%s", &x, &y, color, name ) )
{
// и тут в вышеобявленных переменных будут искомые значения
if( memcmp( color, "black", 5 ) == 0 )
{ // это черный
}
}
}


есть вариант передавать BLACK как число через препроцессор, типо ## но с ходу как точно не скажу


--------------------
Марс - единственная планета, полностью населенная роботами (около 7 штук).
Go to the top of the page
 
+Quote Post



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

 


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


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