Ho notato che cin>> per le stringhe ha lo stesso difetto di scanf()
cosa uso per prendere una stringa in c++ ?
Ho notato che cin>> per le stringhe ha lo stesso difetto di scanf()
cosa uso per prendere una stringa in c++ ?
???
Che intendi?Originariamente inviato da nightfall
???
Se intendi che vuoi una stringa con gli spazi, usa il get()
get() o gets()
la mia domanda era c'e' una funzione simile a gets() per il c++ ?
Sì, scusa, gets...Originariamente inviato da nightfall
get() o gets()
la mia domanda era c'e' una funzione simile a gets() per il c++ ?
Puoi usarla anche col C++, basta includere la sua libreria...
Ma non c'e' una funzione aaposita in c++ che sostituisce gets() ?
Come printf() che viene sostitutita da cout << "";
No... Il cin sostituisce lo scanf... Ma per il gets non hanno fatto un sostituto... Ho letto tempo fa che è perchè il gets può essere nocivo... Non so bene cosa faccia di male, ma ho letto che è possibile sfruttare una sua debolezza per fare virus..Originariamente inviato da nightfall
Ma non c'e' una funzione aaposita in c++ che sostituisce gets() ?
Come printf() che viene sostitutita da cout << "";
Se ti serve fare un imput non formattato devi usare
getline(nomeDelFlusso,nomeStringa)
esempio voglio acquisisre una stringa:
string esempio;
getline(cin,esempio);
attento solo se mischi input formattato "cin >>", e input non formattato "getline()", ogni volta che termina un input formattato devi ripulire il flusso di lettura altrimenti hai problemi es:
string esempio;
int num;
cin >> num;
cin.ignore();
getline(cin,esempio);
Il gets ha il problema che non effettua alcun controllo sulla lunghezza dell' array.Originariamente inviato da Puffolott0
Ho letto tempo fa che è perchè il gets può essere nocivo... Non so bene cosa faccia di male, ma ho letto che è possibile sfruttare una sua debolezza per fare virus..
Per esempio in questo codice
Se scrivo sulla console "Ciao mi chiamo Gino Pino", le dimensioni della stringa superano quelle dell'array e la stringa verrà comunque memorizzata nella memoria successiva all'array, anche se non allocata.codice:#include <stdlib.h> #include <stdio.h> void main() { // Solo 10 caratteri (9 effettivi) char stringa[10]; gets(stringa); printf("Hai scritto: %s",stringa); }
Per quanto riguardi i virus, forse in qualche caso, se nn si sta attenti, potrebbe provocare un crash del sistema o cmq qualche falla... boh :master:
Ma dubito che 1 semplice gets in 1 programma mandi il tuo computer in balia dei cracker...
come mai dovrebbe utilizzare un array di char con i problemi di sconfinamento che può comportare e che hanno segnato purtroppo una delle grandi pecche del C++, quando può usare il tipo string?
Di problemi di sconfinamento di array ce ne sono e alcuni hanno provocato grandi disastri, basta ricordare un satellite che è stato perso dalla NASA o il sistema che gestiva le autombulanze Londinesi che ha lasciato Londra per una giornata intera senza ambulanze. :di56:
in questo modo è tutto più semplice e non comporta problemi :sexpulp: :
L'importante è ricordarsi che se si mischia input formattato "cin >>", e input non formattato "getline()", ogni volta che termina un input formattato si deve ripulire il flusso di lettura altrimenti si hanno problemi es:codice:#include <iostream.h> void main() { string esempio; getline (cin, esempio); }
codice:#include <iostream.h> void main () { string esempio; int num; cin >> num; cin.ignore(); getline(cin,esempio); }