[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