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

 
 
> Указатель на строку в структуре, или даже указатель на указатель
011119xx
сообщение Aug 3 2011, 11:18
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 381
Регистрация: 5-07-05
Из: Уфа
Пользователь №: 6 544



Нужна помощь опытных специалистов.

Код такой:
Код
typedef struct
{
     int               x_numicons;                
     int               y_numicons;                
     int               iconnumber[10];            
} imenu_icons_t;

typedef struct
{
     imenu_icons_t      *menu_idle;                
     imenu_icons_t      *menu_active;          
     imenu_icons_t      *menu_icon;              
     char               *menu_text[10];            
} imenu_t;

imenu_icons_t main_icon = {1, 1, {2, 3, 4, 5, 6, 7, 8, 9, 10, 11}};

imenu_icons_t main_idle = {10, 1, {12, 13, 14, 15, 16, 17, 18, 19, 20, 21}};

imenu_icons_t main_active = {10, 1, {22, 23, 24, 25, 26, 27, 28, 29, 30, 31}};

const char *main_text[10] = {"STR1", "STR2", "STR3", "STR4", "STR5", "STR6", "STR7", "STR8", "STR9", "STR10"};

imenu_t mainmenu = {&main_idle, &main_active, &main_icon, &main_text};

int icon_menu(imenu_t *pmenu)
{
     unsigned char current = 0, i;
     char *ptr;

//     В функции показано не все, поэтому пусть не смущает ее бессмысленность

     for(i = 0; i < entries; i++)
     {
           ptr = (char *)pmenu->menu_text[i];
     }

     return current;
}

unsigned char ic;

void main(void)
{
     ic = icon_menu(&mainmenu);
}

беспокоит строка: ptr = (char *)pmenu->menu_text[i];
так как сейчас она указывает не туда куда хотелось бы. Вопрос в том как это правильно сделать, т.е. чтобы указатель указывал на строку?

Сообщение отредактировал 011119xx - Aug 3 2011, 11:20
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
sergeeff
сообщение Aug 8 2011, 10:14
Сообщение #2


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

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



Как пить дать человек компилирует С++`ом. Тогда print(const char *a) и print(char *a) - суть разные функции. А вот указатель на const char * из char * С++ компилятор приводит автоматом. Посему и рекомендовал объявить print(const char *a) и не парится в будущем с ручным приведением.
Go to the top of the page
 
+Quote Post
ar__systems
сообщение Aug 8 2011, 11:55
Сообщение #3


self made
****

Группа: Свой
Сообщений: 855
Регистрация: 7-03-09
Из: Toronto, Canada
Пользователь №: 45 795



Цитата(sergeeff @ Aug 8 2011, 06:14) *
Как пить дать человек компилирует С++`ом. Тогда print(const char *a) и print(char *a) - суть разные функции.


Дело не в этом, а в том, что в char * нельзя передавать const char * качестве аргумента.
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Aug 8 2011, 12:17
Сообщение #4


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

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



Цитата(ar__systems @ Aug 8 2011, 15:55) *
Дело не в этом, а в том, что в char * нельзя передавать const char * качестве аргумента.


Это в Канаде, наверное нельзя (может религия не позволяет), а в С можно. Себе тестик в Visual Studio или чем-то другом напишите - увидите.
Go to the top of the page
 
+Quote Post
011119xx
сообщение Aug 9 2011, 02:52
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 381
Регистрация: 5-07-05
Из: Уфа
Пользователь №: 6 544



Цитата(sergeeff @ Aug 8 2011, 18:17) *
Это в Канаде, наверное нельзя (может религия не позволяет), а в С можно. Себе тестик в Visual Studio или чем-то другом напишите - увидите.

Вы Keil к Visual Studio подключили? Если так, то научите и меня пожалуйста. А по сути религии могу сказать так: на один и тот же весьма простой исходный текст Keil выдает разные сообщения об ошибках и предупреждениях, если компилировать под С51 и ARM. Скажем, если под С51 его все устраивает, то под ARM уже находит ошибки.
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Aug 9 2011, 13:14
Сообщение #6


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

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



Цитата(011119xx @ Aug 9 2011, 06:52) *
Вы Keil к Visual Studio подключили? Если так, то научите и меня пожалуйста. А по сути религии могу сказать так: на один и тот же весьма простой исходный текст Keil выдает разные сообщения об ошибках и предупреждениях, если компилировать под С51 и ARM. Скажем, если под С51 его все устраивает, то под ARM уже находит ошибки.


1. Когда я упоминал Visual studio, соответственно речь шла о семействе компиляторов Microsoft.
2. Никто не запрещает вам открыть новый проект в Visual studio, основанный на make, и вообще делать все что хочешь (в смысле вызывать любые компиляторы, линкеры и т.п.). Вот с синхронизацией ошибок в output-окне и editor'e будут проблемы, это да.
3. Если хочется, то можно загрузить бесплатно пакет Visual Studio 2008/2010 SDK и наваять оболочку под себя.
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Jun 8 2012, 06:53
Сообщение #7


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(sergeeff @ Aug 9 2011, 17:14) *
2. Никто не запрещает вам открыть новый проект в Visual studio, основанный на make, и вообще делать все что хочешь (в смысле вызывать любые компиляторы, линкеры и т.п.). Вот с синхронизацией ошибок в output-окне и editor'e будут проблемы, это да.

Проблемы с форматом вывода решаемы
Однако, поработав в этой вашей студии, сакрального смысла не нашел.
Это так, в порядке оффтопа.


А насчет предупреждения - это просто несовпадение типов. И это не ошибка, а именно предупреждение на всякий случай, чтобы заострить внимание.
Вот если объявленную константой строку попытаться изменить - тогда будет уже явная ошибка.

Цитата(011119xx @ Jun 8 2012, 10:34) *
Прошу подсказки специалистов как правильно сделать.

Сделать два отдельных массива адресов сообщений, а в функцию передавать адрес нужного (в зависимости от языка) и номер сообщения.

Если я правильно понял задачу.


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 011119xx   Указатель на строку в структуре   Aug 3 2011, 11:18
- - Палыч   Цитата(011119xx @ Aug 3 2011, 15:18) как ...   Aug 3 2011, 11:39
- - ISK2010   Лучше работать с указателем на массив указателей н...   Aug 3 2011, 11:40
|- - Dog Pawlowa   Цитата(ISK2010 @ Aug 3 2011, 14:40) Лучше...   Aug 3 2011, 13:02
- - 011119xx   Проблема решается так: Кодtypedef struct { int ...   Aug 4 2011, 10:27
|- - Палыч   Цитата(011119xx @ Aug 4 2011, 14:27) Проб...   Aug 4 2011, 11:05
|- - ar__systems   Цитата(011119xx @ Aug 4 2011, 06:27) Проб...   Aug 5 2011, 16:23
- - 011119xx   Keil ваш вариант не устраивает. А вот такой устраи...   Aug 5 2011, 02:45
- - 011119xx   Окончательный вариант принятый к использованию: К...   Aug 8 2011, 02:44
|- - sergeeff   Цитата(011119xx @ Aug 8 2011, 06:44) Окон...   Aug 8 2011, 07:50
|- - 011119xx   Цитата(sergeeff @ Aug 8 2011, 13:50) Прос...   Aug 8 2011, 08:33
|- - sergeeff   Цитата(011119xx @ Aug 8 2011, 12:33) Так ...   Aug 8 2011, 08:47
|- - Палыч   Цитата(011119xx @ Aug 8 2011, 12:33) Keil...   Aug 8 2011, 08:52
- - XVR   Вот тут print((char *)pmenu->menu_text[current...   Aug 8 2011, 07:46
|- - 011119xx   Цитата(sergeeff @ Aug 8 2011, 16:14) Как ...   Aug 8 2011, 10:50
|- - ar__systems   Цитата(sergeeff @ Aug 8 2011, 08:17) Это ...   Aug 8 2011, 13:07
||- - Палыч   Цитата(ar__systems @ Aug 8 2011, 17:07) А...   Aug 8 2011, 13:18
|- - XVR   Цитата(sergeeff @ Aug 8 2011, 16:17) Это ...   Aug 8 2011, 16:37
|- - 011119xx   Цитата(MrYuran @ Jun 8 2012, 11:53) Сдела...   Jun 8 2012, 09:32
- - sergeeff   Скажем спасибо людям, написавшим gcc, что оповещаю...   Aug 8 2011, 20:10
- - Genadi Zawidowski   Кодtypedef struct { int x_numicons; i...   Aug 9 2011, 05:06
- - 011119xx   Снова возвращаюсь к данной теме, так как потребова...   Jun 8 2012, 06:34
- - 011119xx   Работает вот так: Кодint icon_menu(imenu_t *pm...   Jun 8 2012, 10:49
- - XVR   Кодtypedef struct { imenu_icons_t *menu_idle; ...   Jun 9 2012, 11:33


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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 12:50
Рейтинг@Mail.ru


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