SUMMARY: stdargs.h bug? V4.0F, PK#3

From: Narendra Ra\[a\]vi <narendra_at_spiff.hr.att.com>
Date: Mon, 30 Oct 2000 16:33:40 -0500

Thanks to

Dan Riley
Serguei Patchkovskii

I was not ending the argument list. Changing

         execit("test", "one", "two", "three");

to

         execit("test", "one", "two", "three", (char *) 0);

worked fine. Gotta relearn how to read the man pages.


-- 
 -- Narendra Ravi     Email : narendra_at_spiff.hr.att.com
    MT  A4-4B27       Phone : 732-420-7792
ORIGINAL MESSAGE:
> 
> Hi Managers,
> 
> Have any of you got complaints that the C library implementation of
> stdarg.h?  Is there a patch for this problem in the Standard C library?
> 
> I have the following program (straight from the man page for stdarg) that
> dumps core at the fourth argument.
> 
> #include <stdarg.h>
> #include <iostream.h>
> 
> #define MAXargS 100
> /*
> **  execl is called by
> **  execl(file, arg1, arg2, . . . , (char *) 0);
> */
> void
> execit(char * file, ...)
> {  va_list ap;
>   char *args[MAXargS];
>   int argno = 0;
>   va_start(ap, file);
>   for (; (args[argno] = va_arg(ap, char *)) != (char *) 0; argno++)
>   {
>               // prints an invalid fourth address.
>         cout << "addr: " << hex << (void*) args[argno] << endl;
>               // dumps core when printing the fourth argument. Obviously.
>         cout << "arg : " << args[argno] << endl;
>   }
>   va_end(ap);
>   //return (execv(file, args));
> }
> 
> int
> main()
> {
>         execit("test", "one", "two", "three");
> }
Received on Mon Oct 30 2000 - 21:35:16 NZDT

This archive was generated by hypermail 2.4.0 : Wed Nov 08 2023 - 11:53:41 NZDT