Article View: be.comp.programming
Article #12874Re: Segmentation Fault
From: Kurt Stremerch
Date: Sun, 30 Sep 2001 09:11
Date: Sun, 30 Sep 2001 09:11
75 lines
3308 bytes
3308 bytes
Patrick wrote:
>
> scanf("%10s",string1);
>
> zal maximaal 10 tekens lezen alvorens af te breken.
> Opgepast, ik ben niet zeker of in dit laatste geval een terminating
> NUL wordt toegevoegd. Even docu. raadplegen. (scanf format specifiers)
>
> INT length;
>
> length = 10;
>
> scanf("%*s",length,string1);
>
> Bovenstaande lijn laat toe om de max. lengte mee te geven als een
> argument. Handig bij variabele lengte.
>
> Patrick Smout
>
ik denk niet dat dit de oplossing biedt. Een scanf("%10s",string1);
stopt toch niet na 10 chars? Indien een 40 chars getal wordt ingegeven
zullen inderdaad maar 10 chars worden toegekent aan string1 maar de rest
wordt doorgegeven aan string2 waar zelfs geen scanf van string2 aan de
gebruiker wordt voorgesteld.
waarom niet? Wel ik denk dat die stdin nog vol chars zit en dat je die
moet leeg maken vooraleer scanf("%*s",length,string2); eraan komt.
Zoniet wordt hij automatisch vervuld. Je kan in linux daarom gebruik
maken van 2 standaard functies: eentje die kijkt of er een soort kbhit
gedaan is en dan direct een false of true returnt + een andere die het
char leest en dus uit de stdin haalt.
static struct termios kb_initial_settings, kb_new_settings;
static int peek_character = -1;
int kbhit()
{
char ch;
int nread;
if(peek_character != -1) return 1;
kb_new_settings.c_cc[VMIN]=0;
tcsetattr(0, TCSANOW, &kb_new_settings);
nread = read(0,&ch,1);
kb_new_settings.c_cc[VMIN]=1;
tcsetattr(0, TCSANOW, &kb_new_settings);
if (nread == 1)
{
peek_character = ch;
return 1;
}
return 0;
}
int readch()
{
char ch;
if (peek_character != -1)
{
ch = peek_character;
peek_character = -1;
return ch;
}
read(0,&ch,1);
return ch;
}
Zo kan je via een while loop op kbhit een readch doen zodat de stdin
leeg wordt gemaakt. Een tweede scanf zal dan wel worden aangeboden
indien de eerste scanf veel te veel chars kreeg.
Graag jullie mening.
Kurt
Technical Details
Message-ID:
<3BB6E1D5.717F23DD@pandora.be>Path:
arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!sn-xit-02!supernews.com!news.tele.dk!small.news.tele.dk!195.238.2.15!skynet.be!skynet.be!ossa.telenet-ops.be!afrodite.telenet-ops.be.POSTED!not-for-mailReferences:
<ofks7.72306$6x5.15824854@afrodite.telenet-ops.be> <MFks7.72338$6x5.15835954@afrodite.telenet-ops.be> <BMks7.72346$6x5.15839206@afrodite.telenet-ops.be> <3BB1E5E3.219F7166@easics.be> <rcms7.72453$6x5.15879072@afrodite.telenet-ops.be> <3bb21ed1.2239810@news.skynet.be>Show Full Headers
Complete Article Headers
X-Google-Language: DUTCH,ASCII-7-bit X-Google-Thread: fcea4,235d965c7bd3acb4 X-Google-Attributes: gidfcea4,public X-Google-ArrivalTime: 2001-09-30 02:12:00 PST Path: arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!sn-xit-02!supernews.com!news.tele.dk!small.news.tele.dk!195.238.2.15!skynet.be!skynet.be!ossa.telenet-ops.be!afrodite.telenet-ops.be.POSTED!not-for-mail Message-ID: <3BB6E1D5.717F23DD@pandora.be> From: Kurt Stremerch <kurt.stremerch@pandora.be> X-Mailer: Mozilla 4.77 [en] (Windows NT 5.0; U) X-Accept-Language: en MIME-Version: 1.0 Newsgroups: be.comp.programming Subject: Re: Segmentation Fault References: <ofks7.72306$6x5.15824854@afrodite.telenet-ops.be> <MFks7.72338$6x5.15835954@afrodite.telenet-ops.be> <BMks7.72346$6x5.15839206@afrodite.telenet-ops.be> <3BB1E5E3.219F7166@easics.be> <rcms7.72453$6x5.15879072@afrodite.telenet-ops.be> <3bb21ed1.2239810@news.skynet.be> Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Lines: 75 Date: Sun, 30 Sep 2001 09:11:59 GMT NNTP-Posting-Host: 195.130.144.241 X-Complaints-To: abuse@pandora.be X-Trace: afrodite.telenet-ops.be 1001841119 195.130.144.241 (Sun, 30 Sep 2001 11:11:59 MET DST) NNTP-Posting-Date: Sun, 30 Sep 2001 11:11:59 MET DST Organization: Telenet Internet