Date: Sun, 4 May 2008 09:55:17 +0200 From: Roland Smith <rsmith@xs4all.nl> To: Unga <unga888@yahoo.com> Cc: freebsd-questions@freebsd.org Subject: Re: Variable arg function question Message-ID: <20080504075517.GA46776@slackbox.xs4all.nl> In-Reply-To: <336540.36159.qm@web57014.mail.re3.yahoo.com> References: <336540.36159.qm@web57014.mail.re3.yahoo.com>
next in thread | previous in thread | raw e-mail | index | archive | help
--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/--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20080504075517.GA46776>