ssa@mrsvr.UUCP (6607) (10/07/88)
For the life of me I can't figure out what is wrong with the following code!!!! It is supposed to parse words from a string in which words are delimited by blanks or tabs, and print one word a line. Simple right? well not quite. when I compile it I get a message: "test.c", line 7: warning: illegal combination of pointer and integer, op = this of course referes to the line with the while loop. When I run it the prompt just comes back, (I am not prompted to put in my string) and the funny part is when I run the same program in dbxtool (SUN WS) IT RUNS FINE !!!!!!!! ____________________________________________________________________________ #include <strings.h> #define NULL (char *) 0 main() { char buf[81]; char *tokptr,*strptr=buf; gets (buf); while((tokptr=strtok(strptr," \t")) != NULL ){ printf ("%s\n",tokptr); strptr=NULL; } } ---------------------------------------------------------------------------- So, what is wrong??? Thanks in advance... ======================================================================= / /| | |\ \ | | /__ /_| | |_\ \ | | ...att!uwmcsd1!mrsvr!ssa / / | | | \ \ | | (414) 547-9429 / o / | |__ | \ \| | (414) 521-6607 (work) =======================================================================
ron@ron.rutgers.edu (Ron Natalie) (10/07/88)
The error is a warning. "Strtok" is not declared anywhere and hence is assumed to return integer. You stuff it in a char pointer. The C compiler is trying to help you write portable code. -Ron
mkhaw@teknowledge-vaxc.ARPA (Mike Khaw) (10/07/88)
Ron Natalie: > The error is a warning. "Strtok" is not declared anywhere and > hence is assumed to return integer. You stuff it in a char SunOS doesn't declare it in <strings.h>, but DOES declare it in <string.h> ^^ ^ Mike Khaw -- internet: mkhaw@teknowledge.arpa uucp: {uunet|sun|ucbvax|decwrl|uw-beaver}!mkhaw%teknowledge.arpa hardcopy: Teknowledge Inc, 1850 Embarcadero Rd, POB 10119, Palo Alto, CA 94303
gwyn@smoke.ARPA (Doug Gwyn ) (10/07/88)
In article <456@mrsvr.UUCP> ssa@mrsvr.UUCP (6607) writes: >"test.c", line 7: warning: illegal combination of pointer and integer, op = >#include <strings.h> > while((tokptr=strtok(strptr," \t")) != NULL ){ <strings.h> doesn't declare strtok, so it is assumed to return int which is not compatible with the char * being assigned into. <strings.h> was invented by Berkeley without regard for existing practice. <string.h> is the official standard header for the str* functions, and it does declare strtok.
ries@jupiter (Marc Ries) (10/07/88)
In article <456@mrsvr.UUCP> ssa@mrsvr.UUCP (6607) writes: > > For the life of me I can't figure out what is wrong with the following > code!!!! It is supposed to parse words from a string in which words [...] >"test.c", line 7: warning: illegal combination of pointer and integer, op = > IT RUNS FINE !!!!!!!! >#include <strings.h> char *strtok(); >#define NULL (char *) 0 >main() >{ > char buf[81]; > char *tokptr,*strptr=buf; > gets (buf); > while((tokptr=strtok(strptr," \t")) != NULL ){ [...] Even though it works, lint and the compiler will be happy if you tell it that you know that strtok() is going to return a character pointer ("char *strtok();"), not an int. Marc Ries TRW Defense Systems Group/HMI UUCP: {sdcrdcf,decvax,ucbvax}!trwrb!spp2!ries@trwspp.UUCP Arpanet: ries@trwrb.TRW.COM
burgett@galaxy.COM (Michael Burgett) (10/07/88)
In article <456@mrsvr.UUCP> ssa@mrsvr.UUCP (6607) writes: > > >"test.c", line 7: warning: illegal combination of pointer and integer, op = > > while((tokptr=strtok(strptr," \t")) != NULL ){ > > So, what is wrong??? in the copy of strings.h that we have here, strtok isn't declared, try adding a char *strtok(); just before main. ;-) Mike Burgett adobe!burgett@decwrl.dec.com
jsdy@hadron.UUCP (Joseph S. D. Yao) (10/08/88)
In article <456@mrsvr.UUCP> ssa@mrsvr.UUCP (6607) writes: >"test.c", line 7: warning: illegal combination of pointer and integer, op = ... > and the funny part is when I run the same program in dbxtool (SUN WS) > IT RUNS FINE !!!!!!!! [L1]>#include <strings.h> [L2]>#define NULL (char *) 0 ... [L7]> while((tokptr=strtok(strptr," \t")) != NULL ){ You do not mention under what machine or C compiler you get the error message. I suspect that, if you look in /usr/include/strings.h on that system, you'll find that strtok() is not declared, while it is on your Sun. Since it is not declared, the C compiler believes that it is a function returning 'int'. (This is an historical bug from before 'void' existed.) Although I like using system include files very much, I tend to try to declare external functions in the body of each new function that uses them. This is good insurance in case - as here - one isn't properly declared, or - as happens - the return value of function xxxfieonyou in your massive project changes, in which case a later 'lint' run will reveal the inconsistency. Joe Yao jsdy@hadron.COM (not yet domainised) hadron!jsdy@{uunet.UU.NET,dtix.ARPA,decuac.DEC.COM} arinc,att,avatar,blkcat,cos,decuac,dtix,\ ecogong,empire,gong,grebyn,inco,insight, \!hadron!jsdy kcwc,lepton,netex,netxcom,phw5,rlgvax, / seismo,sms,smsdpg,sundc,uunet /
vch@attibr.UUCP (Vincent C. Hatem) (10/08/88)
In article <456@mrsvr.UUCP>, ssa@mrsvr.UUCP (6607) writes: > > For the life of me I can't figure out what is wrong with the following > code!!!! It is supposed to parse words from a string in which words : > when I compile it I get a message: > "test.c", line 7: warning: illegal combination of pointer and integer, op = > this of course referes to the line with the while loop. When I run it > the prompt just comes back, (I am not prompted to put in my string) Hmm... works fine on this 3B2... -Vince -- Vincent C. Hatem | att ---->\ (available from any AT&T International | ulysses ->\ Action Central site) International Operations Technical Support | bellcore ->\ 1200 Mt Kemble Ave, Basking Ridge, NJ 07920 | ihnp4 ----->\__ !attibr!vch
rb@ist.CO.UK (Bob Bishop) (10/13/88)
> HELP!!! what is wring with this code? ???????
^^^^^
Has someone been watching "Allo Allo"?