[Comm] send pointer on struct to function in C
Alexey Rusakov
=?iso-8859-1?q?ktirf_=CE=C1_altlinux=2Eru?=
Вт Мар 15 00:11:09 MSK 2005
Alexey Morsov wrote:
>>> {"user", "vasya"},
>>> {"host", "vasya на com.ru")
>>>
>>>
>>А здесь не помешало бы либо добавить , { NULL, NULL }, а в функции
>>проверять на NULLовость ну например name, либо передавать в функцию
>>отдельным параметром размер массива (в примерах этот параметр не использую).
>>
>>
>Хм.... ну если вы имеет ввиду типа для определения конца массива при его
>переборе.... так оно вроде и работает как есть
>Т.е. для текущей структуры конструкция вида
>
>while (cmd[i].user != NULL )
> printf("%s\n", cmd[i++].host);
>
>вполне себе работает :)
>
>
Кхм. Вам крупно повезло.
>Тут наверное лучше пояснить на живом примере так сказать.
>Структура
>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) {
>
>
Здесь лучше const 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'
>
> >_< Вот я понимаю что я тут как-то не прав? Но где именно я не прав?
>
>
Что-то вы не договариваете. Я пришпилил к этому письму файлик - он
прекрасно компилируется через 'gcc-3.4 -o test test.c'.
--
Alexey "Ktirf" Rusakov
----------- следующая часть -----------
An embedded and charset-unspecified text was scrubbed...
Name: test.c
URL: <http://lists.altlinux.org/pipermail/community/attachments/20050315/65ead58b/attachment-0002.c>
Подробная информация о списке рассылки community