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++ - funzione gets()
Forum - C/C++ - funzione gets()

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
zaire90 (Normal User)
Rookie


Messaggi: 46
Iscritto: 16/10/2009

Segnala al moderatore
Postato alle 15:11
Sabato, 17/12/2011
Salve a tutti, ho scritto questo semplicissimo codice per leggere da tastiera una stringa di caratteri con gets:

Codice sorgente - presumibilmente C/C++

  1. # include <stdio.h>
  2. # include <string.h>
  3.  
  4. int main(void)
  5. {
  6.   char str[80];
  7.  
  8.   gets(str);
  9.   printf("\nlunghezza stringa %d",strlen(str));
  10.  
  11.   return 0;
  12. }



e colpilandolo mi da questo messaggio! :
Codice sorgente - presumibilmente VB.NET

  1. zaire90@zaire90-laptop:~/Documenti/Desktop$ gcc ciao.cpp -o a
  2. /tmp/ccqBekgp.o: In function `main':
  3. ciao.cpp:(.text+0x1d): warning: the `gets' function is dangerous and should not be used.
  4. /tmp/ccqBekgp.o:(.eh_frame+0x12): undefined reference to `__gxx_personality_v0'
  5. collect2: ld returned 1 exit status
  6. zaire90@zaire90-laptop:~/Documenti/Desktop$



Come lo devo usare gets() ???

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6390
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 15:15
Sabato, 17/12/2011
Quel warning ti indica che la gets non è raccomandabile perché può essere causa di buffer overflow.

Puoi usare al suo posto la fgets


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
zaire90 (Normal User)
Rookie


Messaggi: 46
Iscritto: 16/10/2009

Segnala al moderatore
Postato alle 15:24
Sabato, 17/12/2011
Ho capito...ma non c'è cmq un modo di usarla lo stesso??
Cioè questo messaggio di errore dipende dal mio compilatore, dal pc o quant'altro?...perchè in fondo un programmino uguale a questo sta su tutti i libri di programmazione dove si spiega l'uso della gets()...

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6390
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 15:29
Sabato, 17/12/2011
Certo che puoi usarla ... infatti hai solo un warning non un errore.

L'altro errore non c'entra con la gets.

Usa g++


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
zaire90 (Normal User)
Rookie


Messaggi: 46
Iscritto: 16/10/2009

Segnala al moderatore
Postato alle 15:34
Sabato, 17/12/2011
Già avevo provato con g++, ma non funziona lo stesso! Il messaggio c'è sempre, guarda:

Codice sorgente - presumibilmente Delphi

  1. zaire90@zaire90-laptop:~/Documenti/Desktop$ g++ ciao.cpp -o a
  2. /tmp/ccrknvyH.o: In function `main':
  3. ciao.cpp:(.text+0x1d): warning: the `gets' function is dangerous and should not be used.
  4. zaire90@zaire90-laptop:~/Documenti/Desktop$



PM Quote
Avatar
zaire90 (Normal User)
Rookie


Messaggi: 46
Iscritto: 16/10/2009

Segnala al moderatore
Postato alle 15:41
Sabato, 17/12/2011
Cioè in sostanza sto cercando di poter immettere una stringa di caratteri come "ciao come stai?", con degli spazi e non riesco a farlo. Usando gets() non funziona, usando scanf() non va bene perchè legge solo fino al primo spazio...e inoltre non volevo usare getchar() facendo un while finchè non si preme invio.

Vorrei poter usare gets()!

PM Quote
Avatar
Nullable (Normal User)
Expert


Messaggi: 217
Iscritto: 12/07/2011

Segnala al moderatore
Postato alle 16:56
Sabato, 17/12/2011
Testo quotato

Postato originariamente da zaire90:

Vorrei poter usare gets()!



...usa fgets() come ti ha suggerito prima nessuno.

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6390
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 17:21
Sabato, 17/12/2011
Non ci siamo capiti ... g++ serve per evitare l'errore non il warning.

Anche se hai il warning dovresti avere il file eseguibile disponibile.

In ogni caso NON CAPISCO perché si devono fare 10 post per seguire un consiglio.

USA LA fgets !

Ultima modifica effettuata da nessuno il 17/12/2011 alle 17:23


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
zaire90 (Normal User)
Rookie


Messaggi: 46
Iscritto: 16/10/2009

Segnala al moderatore
Postato alle 17:23
Sabato, 17/12/2011
A parte il fatto che fgets() non lo so usare...sto provando a capire come funziona ma i programmi mi danno solo errori (se magari qualcuno mi scrivesse un esempio semplice semplice gliene sarei molto grato!)
...e poi cmq ho capito che potrei usare fgets(), ma io vorrei riuscire ad usare gets()! E' possibile usarlo o no!?! :-|

PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo