🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: be.comp.programming
Article #12874

Re: Segmentation Fault

#12874
From: Kurt Stremerch
Date: Sun, 30 Sep 2001 09:11
75 lines
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-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>

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