From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Message-ID: <4235BB5D.7020109@altlinux.ru> Date: Mon, 14 Mar 2005 19:27:09 +0300 From: Alexey Rusakov User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.7.5) Gecko/20041207 Thunderbird/1.0 Mnenhy/0.7 X-Accept-Language: en-us, en MIME-Version: 1.0 To: community@altlinux.ru Subject: Re: [Comm] send pointer on struct to function in C References: <4235A6A7.9020801@ricom.ru> In-Reply-To: <4235A6A7.9020801@ricom.ru> Content-Type: text/plain; charset=KOI8-R; format=flowed Content-Transfer-Encoding: 8bit X-Virus-Scanned: by AMaViS 0.3.12pre8 X-BeenThere: community@altlinux.ru X-Mailman-Version: 2.1.5 Precedence: list Reply-To: community@altlinux.ru List-Id: Mailing list for ALT Linux users List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 14 Mar 2005 16:27:12 -0000 Archived-At: List-Archive: List-Post: 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, либо передавать в функцию отдельным параметром размер массива (в примерах этот параметр не использую). > } > > Теперь хочу передать своей функции ссылку на структуру cmd и имя > параметра "user" а она должна вернуть мне значение этого параметра :) void fn(Options *o, char **user) { /* ... */ user = (char *)malloc(/* ... */) /* ... */ } /* ... */ { char *user; fn(cmd, user); /* ... */ free(user); /* например, а вообще как договоритесь */ } /*** или ***/ char *fn(Options *o) { return /* ... то что нужно */ } /* ... */ { char *user = fn(cmd); /* ... */ /* опять же, как договоритесь */ } /*** или ***/ void fn(Options *o, char *user, int user_name_len) { strncpy(user, /* ... */, user_name_len); } /* ... */ { char user[128]; fn(cmd, user, 128); /* ... */ } -- Alexey "Ktirf" Rusakov