Path: csiph.com!news.fcku.it!aioe.org!.POSTED!not-for-mail From: Giuseppe Della Bianca Newsgroups: it.comp.os.linux.development Subject: Re: Funzione strlen() Date: Sun, 04 Jun 2017 12:20:15 +0200 Organization: Aioe.org NNTP Server Lines: 29 Message-ID: References: NNTP-Posting-Host: vUIDhp1b/3ZrLjr3CMXqIA.user.gioia.aioe.org Mime-Version: 1.0 Content-Type: text/plain; charset="ISO-8859-1" Content-Transfer-Encoding: 7Bit X-Complaints-To: abuse@aioe.org User-Agent: KNode/4.14.10 X-Notice: Filtered by postfilter v. 0.8.2 Xref: csiph.com it.comp.os.linux.development:40 guido84 wrote: ]zac[ > char a[elle]; > > if (argc==2) > { > sscanf(argv[1], "%s", a); > printf("\n%u\n\n", strlen(a)); ]zac[ > Il mio problema e' questo: > - Quando ho immesso piu' di 80 caratteri, ho provocato segfault. > - Ma come faccio a dirgli di uscire se son piu' di 80, quando e' > lei stessa (strlen) che deve contarli?! ]zac[ Il buffer overflow e' causato dalla funzione sscanf che scrive nella variabile fino ad andare oltre la dimensione della stessa. Il codice scritto dopo non puo' prevenire un problema che e' gia' avvenuto. E' compito del programmatore scrivere il codice impedendo alle varie funzioni di comportarsi scorrettamente. P.S. Non credi che dovresti provare a cercare su google sscanf + segfault o sscanf + buffer overflow? (Il miglior modo di imparare e' sfruttare le risorse e le esperienze liberamente disponibili cercando di capire quale e' quella giusta).