Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Lettura stringa
Forum - C/C++ - Lettura stringa

Avatar
HackerV88 (Member)
Pro


Messaggi: 88
Iscritto: 29/09/2008

Segnala al moderatore
Postato alle 13:00
Giovedì, 26/11/2009
Salve vorrei leggere da tastiera una stringa comprensiva di spazi che termina con la pressione del tasto enter.COmeposso fare?

PM Quote
Avatar
Guglielmo (Normal User)
Newbie


Messaggi: 20
Iscritto: 06/07/2009

Segnala al moderatore
Postato alle 14:45
Giovedì, 26/11/2009
Utilizza la funzione fgets.
Ecco il suo prototipo:
Codice sorgente - presumibilmente C/C++

  1. char *fgets(char *s, int size, FILE *stream);


Come primo argomento gli passi il vettore che conterrà la stringa, come secondo la grandezza dello stesso, e come ultimo lo stream da cui vuoi leggere dati(in questo caso stdin).

Ultima modifica effettuata da Guglielmo il 26/11/2009 alle 14:46
PM Quote
Avatar
lorenzo (Normal User)
Guru


Messaggi: 1178
Iscritto: 15/04/2008

Segnala al moderatore
Postato alle 15:46
Giovedì, 26/11/2009
appunto perché riceve uno stream la fgets viene usata per leggere dai files....devi usare la gets(senza la f davanti) che legge direttamente dalla console

PM Quote
Avatar
Lawliet (Normal User)
Expert


Messaggi: 386
Iscritto: 09/04/2009

Segnala al moderatore
Postato alle 16:00
Giovedì, 26/11/2009
Testo quotato

Postato originariamente da lorenzo:

appunto perché riceve uno stream la fgets viene usata per leggere dai files....devi usare la gets(senza la f davanti) che legge direttamente dalla console



Tempo fa, grazie al forum e un utente ho capito che era meglio usare la fgets, e mettere come flusso di stream: stdin così legge da tastiera ed è più sicuro rispetto a gets che è soggetta da buffer overflow :)

PM Quote
Avatar
Guglielmo (Normal User)
Newbie


Messaggi: 20
Iscritto: 06/07/2009

Segnala al moderatore
Postato alle 16:03
Giovedì, 26/11/2009
Testo quotato

Postato originariamente da Lawliet:

Testo quotato

Postato originariamente da lorenzo:

appunto perché riceve uno stream la fgets viene usata per leggere dai files....devi usare la gets(senza la f davanti) che legge direttamente dalla console



Tempo fa, grazie al forum e un utente ho capito che era meglio usare la fgets, e mettere come flusso di stream: stdin così legge da tastiera ed è più sicuro rispetto a gets che è soggetta da buffer overflow :)


Si teoricamente bisognerebbe usare la gets per l'stdin, però è rischiosa perchè se l'utente inserisce un numero di caratteri superiore alla grandezza del vettore si rischia di avere problemi non tanto carini(vedi buffer overflow).

Ultima modifica effettuata da Guglielmo il 26/11/2009 alle 16:04
PM Quote
Avatar
HackerV88 (Member)
Pro


Messaggi: 88
Iscritto: 29/09/2008

Segnala al moderatore
Postato alle 21:14
Giovedì, 26/11/2009
Buonasera,
allora mi postate qualche linea di codice per farmi capire?

PM Quote
Avatar
Guglielmo (Normal User)
Newbie


Messaggi: 20
Iscritto: 06/07/2009

Segnala al moderatore
Postato alle 14:49
Venerdì, 27/11/2009
Testo quotato

Postato originariamente da HackerV88:

Buonasera,
allora mi postate qualche linea di codice per farmi capire?


Codice sorgente - presumibilmente C/C++

  1. ...
  2. #define STR_SIZE 512
  3. ...
  4. char buffer[STR_SIZE];
  5. fgets(buffer, STR_SIZE, stdin);
  6. ...


PM Quote