Article View: nl.comp.programmeren
Article #629Re: c++ isin code
From: Usurpator
Date: Sat, 12 May 2001 15:25
Date: Sat, 12 May 2001 15:25
98 lines
4357 bytes
4357 bytes
Op Thu, 10 May 2001 17:45:10 GMT slaagde TdC erin om dit te potsen:
>ik probeer deze code te laten werken in c++ in gewoon c werkt het maar wel
>met warning bij compile
>
>vb
>bash-2.04$ gcc test.cpp
>test.cpp: In function `int main()':
>test.cpp:34: passing `char **' as argument 1 of `isin(char *, char *)'
>bash-2.04$ cp test.cpp test.c
>bash-2.04$ gcc test.c
>test.c: In function `main':
>test.c:34: warning: passing arg 1 of `isin' from incompatible pointer type
>test.c:34: warning: passing arg 2 of `isin' from incompatible pointer type
>bash-2.04$ ./a.out
>it works
>int isin(char *string1,char *string2)
Op het eerste gezicht vroeg ik me af waarom je geen if(strstr(string1,
string2) != NULL) deed. Het is altijd handig om commentaar te gebruiken,
zoals
/* Searches the first word of the sentence in string1 in string2.
Returns 1 when it's found and 0 when it isn't. */
Maar dat terzijde.
> char *word1;
> word1 = strtok (string1, " "); // returns a char *
> string2 = strstr (string2,word1); // returns a char * ///
string2 = strstr(string2, strtok(string1, " \t"));
En // comments mogen niet in C, wel in C++
> if (string1 == '\0')
if(!string1)
{ return 0; }
Moet je voor die strtok zetten.
> if(strncmp (string1, string2, strlen(string1)) == 0)
Waarom dit en niet gewoon if(string2 != NULL); ?
>int main()
>{
> char *a="test test";
> char *b="lala test tetsttt123";
> if (isin(&a,&b) == 1) // werkt in C niet in CPP en moet CPP zijn dus :(
Moet isin(a, b) zijn. Het is isin(char*, char*) en hier doe je
isin(char**, char**) (a is uit zichzelf char*, dus &a is char**)
Wat wel klopt is dat het programma gewoonweg crashed als je a ipv
&a geeft. Dat komt omdat de library op mijn systeem waarin strtok() zit
gewoonweg crashed als je een strtok(char*, const char*), zoals dat ook
moet volgens de ANSI en POSIX standaards, doet. Als je strtok(char**,
const char*) crashed hij niet maar geeft hij een pointer naar een berg
onzin terug.
Ik ga even naar de GNU-website surfen om te kijken of er een bugfix is
en anders ga ik zelf een patch ervoor schrijven. Ik gebruik glibc 2.2
(je kunt de versie controleren door op de command prompt /lib/libc.so.6
te doen).
Hier heb je wel al een aangepaste versie van het programma die zou
moeten werken in andere C-compilers:
#include <stdio.h>
#include <string.h>
int isin(char* tosearch, char* searchin) {
/* Searches the first word of the sentence in string1 in
string2. Returns 1 when it's found and 0 when it isn't. */
if(!tosearch || !searchin)
{ return 0; }
if(strstr(searchin, strtok(tosearch, " \t")) != NULL)
{ return 1; }
return 0;
}
void main(void) {
char *a="test test";
char *b="lala test tetsttt123";
if (isin(a,b))
{ printf("it works"); }
else
{ printf("it doesn't work"); }
return 0;
}
q
--
Jij bent afgebrand, smeerlap. Je hebt het verbruid. Alleen als je op je
knieen je verontschuldigingen aanbiedt bestaat er een hele kleine kans
dat ik ooit je gekots nog zal beantwoorden.
-- Town Kraaier, <MPG.155a2e7c8a7f197a989790@news.earthlink.net>
Technical Details
Message-ID:
<slrn9fqivo.b9.iqnullus@kaboutfger.bas>Path:
arc1-ca.pugleaf.net!archiver1.sj.google.com!newsfeed.google.com!sn-xit-03!supernews.com!cyclone-sjo1.usenetserver.com!news-out-sjo.usenetserver.com!news.tele.dk!134.222.94.5!npeer.kpnqwest.net!news2.kpn.net!news.kpn.net!feeder02.wxs.nl!transit.news.xs4all.nl!iqnullusReferences:
<GsAK6.67067$ii.8636438@afrodite.telenet-ops.be>Show Full Headers
Complete Article Headers
X-Google-Language: DUTCH,ASCII-7-bit X-Google-Thread: 107324,6e75983a23de8f69 X-Google-Attributes: gid107324,public X-Google-Thread: fcea4,6e75983a23de8f69 X-Google-Attributes: gidfcea4,public X-Google-ArrivalTime: 2001-05-12 08:26:03 PST Path: arc1-ca.pugleaf.net!archiver1.sj.google.com!newsfeed.google.com!sn-xit-03!supernews.com!cyclone-sjo1.usenetserver.com!news-out-sjo.usenetserver.com!news.tele.dk!134.222.94.5!npeer.kpnqwest.net!news2.kpn.net!news.kpn.net!feeder02.wxs.nl!transit.news.xs4all.nl!iqnullus From: iqnullus@arachne.jaze.net (Usurpator) Newsgroups: nl.comp.programmeren,be.comp.programming Subject: Re: c++ isin code Date: 12 May 2001 15:25:03 GMT Organization: XS4ALL Internet BV Lines: 98 Message-ID: <slrn9fqivo.b9.iqnullus@kaboutfger.bas> References: <GsAK6.67067$ii.8636438@afrodite.telenet-ops.be> NNTP-Posting-Host: modem34.dial.xs4all.be X-Trace: news1.xs4all.nl 989681103 23788 195.144.65.34 (12 May 2001 15:25:03 GMT) X-Complaints-To: abuse@xs4all.nl NNTP-Posting-Date: 12 May 2001 15:25:03 GMT User-Agent: slrn/0.9.6.3 (Linux)