Newsgroup: it.comp.os.linux.development
Titolo: fgets

Ciao a tutti.
Su un sistema MDK10 ho installato Borlan CBuilderX PE ed ho provato a
scrivere un piccolo programma di prova in C:
#include <stdio.h>
int main(int argc, char *argv[])
{
  char buffer[100];
  while(fgets(buffer, sizeof(buffer), stdin))
  {
    printf("primo while\n");
    .......
    .......
  }
}
Dalla documentazione di fgets mi sembra che sia tutto a posto, eppure quando
l'esecuzione arriva al while con fgets il prg si interrompe (il printf non
viene eseguito) segnalando un bel "Segmentation Fault" :((
Sicuramente sbaglio qualcosa io (vista la mia scarsa esperienza in C), ma
sinceramente non so dove.
Se qualcuno vedesse l'errore e volesse farmelo notare avrebbe la mia eterna
gratitudine.
Ciao e grazie.
-- 
~~~~Slaine Mc Roth~~~~
**Linux User# 312607**
Non si puo' avere una faccia con se stessi e una con gli altri senza
confondersi alla fine su quale sia quella vera.  (Nathaniel Hawtorn)

 
Veramente man dice: "fgets() reads in at most one less than size
characters from stream", mentre qualche riga sopra vediamo: "gets() reads
a line from stdin".
Se vuoi leggere dallo standard input, prova ad usare gets().
--
web 
http://madbob.homelinux.com
mail bob4mailC...@CANCELLAMIk.st
BrainTop Project maintainer
http://braintop.sourceforge.net
Inviato da 
www.mynewsgate.net

 Dalla documentazione di fgets mi sembra che sia tutto a posto, eppure
]zac[
Dalla documentazione sembra che sia sbagliato:
char *fgets( char *string, int n, FILE *stream );
Due indizi, un libro prima di leggerlo lo apri; stream o non stream questo
è .... non leggere bene la documentazione.

 Se vuoi leggere dallo standard input, prova ad usare gets().
gets non ha limiti sui caratteri letti, e poi fgets dovrebbe funzionare
ugualmente visto che stdin e' uno stream, aperto di default dal sistema,
che fa riferimento allo standard input, per cui non penso sia quello il
problema.
Comunque provero' come dici per vedere cosa ne esce, intanto grazie per la
risposta.
Ciao
-- 
~~~~Slaine Mc Roth~~~~
**Linux User# 312607**
Dobbiamo diventare il cambiamento che vogliamo vedere.  (Gandhi)

 è .... non leggere bene la documentazione.
Se ti riferisci al fatto che non ho aperto stdin non dovrebbe essere
necessario in quanto lo stream dovrebbe gia' essere aperto di default ( o
no?).
Grazie per la risposta e ciao.
-- 
~~~~Slaine Mc Roth~~~~
**Linux User# 312607**
Fare facilmente cio' che gli altri trovano difficile e' talento; fare cio'
che e' impossibile al talento e' genio.  (Frederic Henri Amiel)

Il 15:07, domenica 18 luglio 2004 senza pensare alle terribili conseguenze
Slaine Mc Roth disse:
Ho risolto!
Il problema non risiedeva in "fgets" ma in CBuiderX che non (?!) compilava
correttamente. Infatti ho cancellato manualmente i file .o prodotti dalla
compilazione e ricompilato e tutto e' andato a posto. Molto probabilmente
era una rimanenza di una vecchia compilazione del progetto in cui avevo
commesso un errore. Il fatto e' che cliccando sul menu "Rebuild project" di
CBuilder mi aspettavo che avvenisse una ricompilazione completa.
Evidentemente mi sbagliavo :((
Grazie a tutti per le risposte e scusate se vi ho fatto perdere tempo
inutilmente.
Ciao.
-- 
~~~~Slaine Mc Roth~~~~
**Linux User# 312607**
Un fatto della nostra vita ha valore non perche' e' vero, ma perche' ha
significato qualcosa.  (Johann Wolfgang Goethe)

 Se vuoi leggere dallo standard input, prova ad usare gets().
gets() e` deprecato e rappresenta un grosso problema per la sicurezza.
Non andrebbe usato *mai*.
Luca
-- 
Home: 
http://kronoz.cjb.net
Porc i' mond che cio' sott i piedi!
V. Catozzo

 Se ti riferisci al fatto che non ho aperto stdin non dovrebbe essere
]zac[
Già, scusa per la risposta completamente errata (cosi imparo a fare lo
spiritoso).