Path: ...!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!eternal-september.org!.POSTED!not-for-mail From: "Steven G. Kargl" Newsgroups: comp.lang.fortran Subject: Re: how do you send a fortran character string from GCC to GFortran ? Date: Thu, 2 Jan 2025 23:37:51 -0000 (UTC) Organization: A noiseless patient Spider Lines: 55 Message-ID: References: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Injection-Date: Fri, 03 Jan 2025 00:37:51 +0100 (CET) Injection-Info: dont-email.me; posting-host="6b602592fce6df44489a744f0ab75dc0"; logging-data="3742174"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1+v2PALlSQjGgnrYmxwJN1z" User-Agent: Pan/0.145 (Duplicitous mercenary valetism; d7e168a git.gnome.org/pan2) Cancel-Lock: sha1:IlXrTAGxRYQdgMrsPLMe9rVpwTA= Bytes: 2659 On Thu, 02 Jan 2025 16:38:10 -0600, Lynn McGuire wrote: > On 1/2/2025 12:40 PM, Steven G. Kargl wrote: >> On Thu, 02 Jan 2025 02:27:54 -0600, Lynn McGuire wrote: >> >>> How do you send a fortran character string from GCC to GFortran ? >>> >>> I cannot get this to link. I can do the reverse, send a fortran >>> character string from Gfortran to GCC. >>> >>> I do have the additional complication that I do not know the length of >>> the fortran character string being sent from GCC to Gfortran at compile >>> time, only run time. So that is a character*(*) string. >>> >>> I am not using the ISO C binding. >> >> As Thomas as indicated, ISO C binding was introduced into the >> Fortran standard to address your needs. But, if you want to >> go old school with gcc/gfortran, then >> >> % cat aa.c >> #include >> >> void >> string_(char *s, int *slen) >> { >> strncpy(s, "abc", *slen); >> } >> >> % cat bb.f90 >> program foo >> external :: string >> character(len=10) str >> call string(str, len(str)) >> print *, '>>' // str //'<<' >> end program foo >> >> % ~/work/bin/gcc -c aa.c >> % gfcx -o z bb.f90 aa.o >> % ./z >> >>abc<< > > Isn't the character string length variable "slen" a value parameter and > size_t type ? > 'int *' is a pointer to an int. size_t may or may not be an int. If one refuses to use the facilities of the Fortran standard, namely ISO C binding, then one needs to experiment to determine the type(s) and calling convention. -- steve