[Comm] send pointer on struct to function in C
Alexey Morsov
=?iso-8859-1?q?samurai_=CE=C1_ricom=2Eru?=
Пн Мар 14 19:57:38 MSK 2005
Alexey Rusakov wrote:
> On 14.03.2005 17:58, Alexey Morsov wrote:
>
>>Привет,
>>
>>Не могу никак понять, как в Си передать в функцию ссылку на массив
>>структур ?
>>
>>Пояснение:
>>есть структура
>>
>>typedef struct {
>> char *name;
>> char *val;
>>} Options;
>>
>>далее я ее инициализирую
>>Options cmd = {
>
> Options cmd[] = ... , вы хотели сказать, я думаю.
Точно точно - описался - в коде то нормально написано
>
>
>> {"user", "vasya"},
>> {"host", "vasya на com.ru")
>
> А здесь не помешало бы либо добавить , { NULL, NULL }, а в функции
> проверять на NULLовость ну например name, либо передавать в функцию
> отдельным параметром размер массива (в примерах этот параметр не использую).
Хм.... ну если вы имеет ввиду типа для определения конца массива при его
переборе.... так оно вроде и работает как есть
Т.е. для текущей структуры конструкция вида
while (cmd[i].user != NULL )
printf("%s\n", cmd[i++].host);
вполне себе работает :)
>>Теперь хочу передать своей функции ссылку на структуру cmd и имя
>>параметра "user" а она должна вернуть мне значение этого параметра :)
>
> void fn(Options *o, char **user)
Тут наверное лучше пояснить на живом примере так сказать.
Структура
typedef struct {
const char *name;
char *val;
} Options;
инициализация
Options cmd[] = {
{"squidlog", "access.log"}, // path to squid access.log file
{"config", "trafficd.conf"} // path to trafficd conf file
};
функция
char *OptionGetVal(Options *opt, char *name) {
int i=0;
while (opt[i].name != NULL ) {
if (!strcmp(name,opt[i].name))
return(opt[i].val);
i++;
}
return NULL;
}
вызов ее такой
printf("squidlog=%s\n", OptionGetVal(cmd,"squidlog"));
при компиляции имею:
In file included from common.c:1,
from main.c:2:
trafficd.h:23: error: conflicting types for `Options'
trafficd.h:23: error: previous declaration of `Options'
trafficd.h:32: error: conflicting types for `OptionsGetVal'
trafficd.h:32: error: previous declaration of `OptionsGetVal'
>_< Вот я понимаю что я тут как-то не прав? Но где именно я не прав?
--
Всего наилучшего,
Системный Администратор ЗАО "ИК "РИКОМ-ТРАСТ"
Алексей Морсов
ICQ: 196766290
Jabber: Samurai на jabber.pibhe.com
http://www.ricom.ru
http://www.fondmarket.ru
Подробная информация о списке рассылки community