Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Вопрос по языку С
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
sherr
Изобретаю очередной велосипед - создаю несложный 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)

megajohn
void CreateButton(unsigned short x,unsigned short y,unsigned char*str)
{
strncpy( gui[i].name, str, 11 ); // что так
strncpy( &gui[i].name[0], str, 11 ); // что сяк
}
sherr
А вот еще такой вопрос -
пусть функция
принимает строку
(это альтернативный вариант)
void CreateButton (unsigned char*str)
.......
CreateButton("x_40 y_80 color_black name_button1")

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

Можно ли обьяснить препроцессору чтобы он
подставил значение внутрь строки или
как то еще выкрутиться ?
megajohn
Цитата(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 как число через препроцессор, типо ## но с ходу как точно не скажу
sherr
Спасибо, оперативно .
A. Fig Lee
Цитата(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 очень плохая и дорогая функция, лучше ее не пользовать.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.