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