|
C doesn't really care about NULL terminated strings. Some of its functions rely on the fact that an array of characters is terminated with a NULL but there are many other functions that just don't care. Whether or not your printf shows up to the NULL ("%s") or the entire buffer ("%10.10s") depends on how you code it. In Barbara's example there are 2 parameters and how long they are are determined by the calling program not what is contained in them. You shouldn't rely on stuff passed to your C program being NULL terminated - unless you wrote the caller. > I know that C uses null terminated strings, and am fairly sure that > the arguments are put onto the stack instead of the pointers, which > makes me think C would see 4 parameters, but I'm not sure what > argc would report. Also, if it was 2 parameters obviously the > printf would only show the initial 'abc' anyway stopping at the null > terminator. > -----Original Message----- > From: Jim Langston [SMTP:jimlangston@conexfreight.com] > Sent: Monday, July 09, 2001 2:50 PM > To: MI400@midrange.com > Subject: Re: API parameter lengths > > A question on this Barbara, > > > #include <stdio.h> > > main(int argc, char *argv[]) > > { > > int i; > > for (i = 1; i < argc; i++) > > { > > printf("arg %d %s\n", i, argv[i]); > > } > > } > > ===> CALL pgm ('abc def ghi' 'zyx') > > arg 1 abc def ghi > > arg 2 zyx > > Say the string 'abc def ghi' was in a variable. Say that > I changed the spaces x'40' to nulls x'00'. Then passed > them like this: > > > ===> CALL pgm (&PARM1 &PARM2) > > Would the C program then report this as 4 parameters or still 2? > I know that C uses null terminated strings, and am fairly sure that > the arguments are put onto the stack instead of the pointers, which > makes me think C would see 4 parameters, but I'm not sure what > argc would report. Also, if it was 2 parameters obviously the > printf would only show the initial 'abc' anyway stopping at the null > terminator. > > Regards, > > Jim Langston > > Me transmitte sursum, Caledoni! > > bmorris@ca.ibm.com wrote: > > > > >Date: Mon, 9 Jul 2001 10:54:23 -0500 > > >From: "Alexei Pytel" <pytel@us.ibm.com> > > > > > >CALL command does not do this. > > >C PEP (program entry point) procedure does. For every main() in C, > > compiler > > >generates a PEP (you may see it if you do DSPMOD on C module). This PEP > > >procedure among other things will scan for first blank in each > parameter > > >and create null-terminated string for each parameter. > > ?This makes it very difficult to pass non-character parameters to C > main(). > > > > Alexei, that is not true; where did you hear that? If you call a C > program > > with a parameter of 'abc def ghi', it will get one parameter. The > > null-termination is indeed done by the call command. > > > > Calling a C program from another program is not difficult. In that > > case, the C program receives the same parameters that the caller passed > > because the PEP doesn't do any processing on the parameters except to > > build the argv array from the parameters that are passed to the program. > > But it just copies the parameter pointers into the array of pointers; it > > doesn't do anything with the parameter data. > > > > A test: > > > > #include <stdio.h> > > main(int argc, char *argv[]) > > { > > int i; > > for (i = 1; i < argc; i++) > > { > > printf("arg %d %s\n", i, argv[i]); > > } > > } > > ===> CALL pgm ('abc def ghi' 'zyx') > > arg 1 abc def ghi > > arg 2 zyx > > > > Barbara Morris > +--- > | This is the MI Programmers Mailing List! > | To submit a new message, send your mail to MI400@midrange.com. > | To subscribe to this list send email to MI400-SUB@midrange.com. > | To unsubscribe from this list send email to MI400-UNSUB@midrange.com. > | Questions should be directed to the list owner/operator: > dr2@cssas400.com > +--- +--- | This is the MI Programmers Mailing List! | To submit a new message, send your mail to MI400@midrange.com. | To subscribe to this list send email to MI400-SUB@midrange.com. | To unsubscribe from this list send email to MI400-UNSUB@midrange.com. | Questions should be directed to the list owner/operator: dr2@cssas400.com +---
As an Amazon Associate we earn from qualifying purchases.
This mailing list archive is Copyright 1997-2024 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].
Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.