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

 
 
 
Reply to this topicStart new topic
> Вопрос по языку С, Обращение к массиву внутри массива структур
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
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
sherr
сообщение Nov 29 2014, 18:28
Сообщение #5


Местный
***

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



Спасибо, оперативно .
Go to the top of the page
 
+Quote Post
A. Fig Lee
сообщение Nov 30 2014, 12:03
Сообщение #6


Знающий
****

Группа: Участник
Сообщений: 974
Регистрация: 4-04-08
Из: далека
Пользователь №: 36 467



Цитата(megajohn @ Nov 29 2014, 12:43) *
это излишне, но если очень хочется то лучше упростить
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 как число через препроцессор, типо ## но с ходу как точно не скажу



sscanf очень плохая и дорогая функция, лучше ее не пользовать.


--------------------
Верить нельзя никому, даже себе. Мне - можно.
Go to the top of the page
 
+Quote Post

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

 


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


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