Skip site navigation (1)Skip section navigation (2)
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>