🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: be.comp.programming
Article #12787

Re: Segmentation Fault

#12787
From: Patrick
Date: Mon, 01 Oct 2001 19:25
91 lines
3797 bytes
Kurt,

In mijn reply wou ik enkel aangeven hoe je de maximale lengte van een
invoerstring wel degelijk kan beperken, in tegenstelling tot wat
elsders vermeld was, om zodoende een GP fault te voorkomen. Je hebt
verder wel gelijk dat deze uitbreiding niet zonder meer gebruikt kan
worden om meerdere strings na elkaar binnen te lezen zoals bescrheven
staat in de originele post. Persoonlijk zou ik zelfs geen gebruik
maken van scanf() voor een dergelijke opdracht doch zoals je
waarschijnlijk wel weet zijn er meerdere bruikbare methoden.

Patrick

On Sun, 30 Sep 2001 09:11:59 GMT, Kurt Stremerch
<kurt.stremerch@pandora.be> wrote:

>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: <3bb8c167.2286758@news.skynet.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!louie!not-for-mail
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> <3BB6E1D5.717F23DD@pandora.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-10-01 12:25:23 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!louie!not-for-mail
From: sopa@skynet.be (Patrick)
Newsgroups: be.comp.programming
Subject: Re: Segmentation Fault
Date: Mon, 01 Oct 2001 19:25:15 GMT
Message-ID: <3bb8c167.2286758@news.skynet.be>
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> <3BB6E1D5.717F23DD@pandora.be>
X-Newsreader: Forte Free Agent 1.21/32.243
Lines: 92
Organization: -= Skynet Usenet Service =-
NNTP-Posting-Host: 62.4.226.199
X-Trace: 1001964316 reader0.news.skynet.be 21082 62.4.226.199
X-Complaints-To: abuse@skynet.be