PDA

Visualizza la versione completa : [C++] Inserimento Stringa...


nightfall
08-12-2003, 12:10
Ho notato che cin>> per le stringhe ha lo stesso difetto di scanf()
cosa uso per prendere una stringa in c++ ?

nightfall
10-12-2003, 18:57
??? :dh:

Puffolott0
10-12-2003, 19:31
Originariamente inviato da nightfall
??? :dh: Che intendi?
Se intendi che vuoi una stringa con gli spazi, usa il get()

nightfall
10-12-2003, 19:44
get() o gets()
la mia domanda era c'e' una funzione simile a gets() per il c++ ?

Puffolott0
10-12-2003, 19:51
Originariamente inviato da nightfall
get() o gets()
la mia domanda era c'e' una funzione simile a gets() per il c++ ? S, scusa, gets...
Puoi usarla anche col C++, basta includere la sua libreria...

nightfall
10-12-2003, 19:53
Ma non c'e' una funzione aaposita in c++ che sostituisce gets() ?
Come printf() che viene sostitutita da cout << "";

Puffolott0
10-12-2003, 20:31
Originariamente inviato da nightfall
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.. :bh:

andypower
11-12-2003, 14:18
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);

iguana13
11-12-2003, 16:22
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.. :bh:


Il gets ha il problema che non effettua alcun controllo sulla lunghezza dell' array.

Per esempio in questo codice



#include <stdlib.h>
#include <stdio.h>

void main()
{
// Solo 10 caratteri (9 effettivi)
char stringa[10];

gets(stringa);

printf("Hai scritto: %s",stringa);

}


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.

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 :confused: :master:

Ma dubito che 1 semplice gets in 1 programma mandi il tuo computer in balia dei cracker... :ciauz: :ciauz:

andypower
11-12-2003, 18:00
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: :


#include <iostream.h>
void main() {
string esempio;
getline (cin, esempio);
}


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:



#include <iostream.h>
void main () {
string esempio;
int num;
cin >> num;
cin.ignore();
getline(cin,esempio);
}

Loading