From owner-freebsd-questions@FreeBSD.ORG Sun May 4 07:55:20 2008 Return-Path: Delivered-To: freebsd-questions@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id E29E31065687 for ; Sun, 4 May 2008 07:55:20 +0000 (UTC) (envelope-from rsmith@xs4all.nl) Received: from smtp-vbr3.xs4all.nl (smtp-vbr3.xs4all.nl [194.109.24.23]) by mx1.freebsd.org (Postfix) with ESMTP id 7F7B38FC16 for ; Sun, 4 May 2008 07:55:20 +0000 (UTC) (envelope-from rsmith@xs4all.nl) Received: from slackbox.xs4all.nl (slackbox.xs4all.nl [213.84.242.160]) by smtp-vbr3.xs4all.nl (8.13.8/8.13.8) with ESMTP id m447tIJC008429; Sun, 4 May 2008 09:55:18 +0200 (CEST) (envelope-from rsmith@xs4all.nl) Received: by slackbox.xs4all.nl (Postfix, from userid 1001) id DF818B844; Sun, 4 May 2008 09:55:17 +0200 (CEST) Date: Sun, 4 May 2008 09:55:17 +0200 From: Roland Smith To: Unga Message-ID: <20080504075517.GA46776@slackbox.xs4all.nl> Mail-Followup-To: Unga , freebsd-questions@freebsd.org References: <336540.36159.qm@web57014.mail.re3.yahoo.com> MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="TB36FDmn/VVEgNH/" Content-Disposition: inline In-Reply-To: <336540.36159.qm@web57014.mail.re3.yahoo.com> X-GPG-Fingerprint: 1A2B 477F 9970 BA3C 2914 B7CE 1277 EFB0 C321 A725 X-GPG-Key: http://www.xs4all.nl/~rsmith/pubkey.txt X-GPG-Notice: If this message is not signed, don't assume I sent it! User-Agent: Mutt/1.5.17 (2007-11-01) X-Virus-Scanned: by XS4ALL Virus Scanner Cc: freebsd-questions@freebsd.org Subject: Re: Variable arg function question X-BeenThere: freebsd-questions@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: User questions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 04 May 2008 07:55:21 -0000 --TB36FDmn/VVEgNH/ Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Sun, May 04, 2008 at 12:40:43AM -0700, Unga wrote: > Hi all >=20 > I need to implement a variable argument function in C. > The number of args are not known but the type is > known, all are strings. >=20 > Unfortunately va_arg() [stdarg(3)] does not return > NULL or any other suitable value after processing the > arg list, it just simply crashes once the arg list is > exhausted. It is _your_ task to properly close the argument list. E.g. by supplying a NULL pointer as the last argument. =20 > It seems there is no way to know the number of args > inside the called function. Not with stdarg. > How do you guys implement variable arg function such > as f(str1, str2, str3, ..., strN)? you could use the same format as main: int foo(int num, char **args) Roland --=20 R.F.Smith http://www.xs4all.nl/~rsmith/ [plain text _non-HTML_ PGP/GnuPG encrypted/signed email much appreciated] pgp: 1A2B 477F 9970 BA3C 2914 B7CE 1277 EFB0 C321 A725 (KeyID: C321A725) --TB36FDmn/VVEgNH/ Content-Type: application/pgp-signature Content-Disposition: inline -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.9 (FreeBSD) iEYEARECAAYFAkgda+UACgkQEnfvsMMhpyWXUACglGPeMcjdveOHfjsyoQgcC+X9 YKQAoIaod4VjSOpj5ar0DaOvjXGdgw5d =ibfP -----END PGP SIGNATURE----- --TB36FDmn/VVEgNH/--