Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. 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() ???


...La saggezza di un singolo somiglia ad un albero conficcato alla meno peggio nel terreno...( HAGAKURE, codice 15)
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5472
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 ...
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()...


...La saggezza di un singolo somiglia ad un albero conficcato alla meno peggio nel terreno...( HAGAKURE, codice 15)
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5472
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 ...
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$




...La saggezza di un singolo somiglia ad un albero conficcato alla meno peggio nel terreno...( HAGAKURE, codice 15)
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()!


...La saggezza di un singolo somiglia ad un albero conficcato alla meno peggio nel terreno...( HAGAKURE, codice 15)
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.


Hai perso.
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5472
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 ...
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!?! :-|


...La saggezza di un singolo somiglia ad un albero conficcato alla meno peggio nel terreno...( HAGAKURE, codice 15)
PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo