Hello Georges and Philippe, Thank you for the bug report and sorry for long delay in response. I've been in 2 weeks business trip. Following problem will be solved in next release. Thank you Masaharu Goto >Date: Thu, 26 Jul 2001 09:01:18 -0500 >From: Philippe Canal <pcanal@fnal.gov> >To: Georges Lobo <lobo@irmm.jrc.be>, roottalk@pcroot.cern.ch >Cc: Masaharu Goto <MXJ02154@nifty.ne.jp> >Subject: RE: [ROOT] Problem using C (passing arguments) > >Hi, > >Did you try to run in CINT non-debug mode (i.e. do .O 0 before >running your macro)? > >Philippe. > >-----Original Message----- >From: owner-roottalk@pcroot.cern.ch >[mailto:owner-roottalk@pcroot.cern.ch]On Behalf Of Georges Lobo >Sent: Thursday, July 26, 2001 2:17 AM >To: roottalk@pcroot.cern.ch >Subject: [ROOT] Problem using C (passing arguments) > > >Hi Rooters, >I'm trying to implement am existing C program which reads the neutron data >files from ENDF. Since the file is quite complicated I want to use a >program already written by somebody else. >I'm curently using it with CINT inside root. >I had to do some adjustements but I am facing a problem which I don't >understand. I give the pieces of the code where the problem occurs >/*Global variables */ >#define MIN(A,B) ((A)<(B)) ? (A) : (B) >char xfr_buf[128], *b66 = xfr_buf+ 66; /*global too */ > >I'm doing then several call to the function endf_scan >written below. The calls are in a loop > >endf_scan(xfr_buf,dv,MIN(rest,6)); >the local variables are defined as >double dv[2]; >long rest; > >For the first step of the loop everything is OK, but in the second step >I have an error >Error: strncpy param[1]=0 must not be 0 >Printing the value of b and v shows that for the second call all the >arguments of endf_scan are null. I verified that the arguments before the >call i.e. xfr_buf and dv are non-null. >I really don't understand what's happening. >Thanks in advance. > > /* ................................................. ENDF_SCAN > * Scan an ENDF HEAD or TAB1 record b into d.fl.pt. vector v > */ >int endf_scan(char *b, double *v, int lim) >{ > > int k, rv=0, mant; > char buf[14],*p; > buf[13]=EOS; > cout << "In endf_scan"<<endl; > printf("b adress = %i b content %s\n",&b,b); > // printf("****\n%80s", b); > for ( k=0; k < lim; ++k, b += 11){ > strncpy(buf, b, 11); > p = strpbrk(buf + 1, "+-"); > if (p != NULL){ > mant = p - buf; > strncpy(buf, b, mant); > p[0] = 'E'; > p[1] = b[mant]; > p[2] = (b[mant+1] == ' ')? b[mant+2] : b[mant+1]; > p[3] = ' '; > } > /*printf("%s\n", buf);*/ > printf("print before scanf ); > rv += sscanf (buf, "%lf", v + k); > } > /******* > for (k = 0; k < rv; ++k) > printf("%g\t", v[k]); > printf("\n"); > if (rv == 6) > ags_exit ("STOP"); > ********/ > cout << "out endf_scan"<<endl; > return ( rv ); >} > > >
This archive was generated by hypermail 2b29 : Tue Jan 01 2002 - 17:50:56 MET