PDA

View Full Version : [C++] ifstream ,stringe e cin


nuovoUtente86
29-10-2007, 18:31
dovendo leggere il nome di un file da tastiera avevo fatto qualcosa del genere

string nomefile;
cin>>nomefile;
ifstream(nomefile)

e mi da errore non riconscendo la stringa come parametro valido.
Ho modificato cosi:

char* nomefile;
cin>>nomefile;
ifstream(nomefile)

compila ma quando esegue la shell crashia.

Ho risolto cosi:

string nomefile;
cin>>nomefile;
const char* nomefile2=nomefile.data();
ifstream(nomefile)


Esiste un modo piu elegante di farlo.Possibile che ifstream non acetti in ingresso la stringa e che cin dia problemi con un array di char?

cionci
29-10-2007, 20:08
Nel secondo c'è un errore perché non allochi spazio per contenere l'array di caratteri ;)

Si fa così:

string nomefile;
cin >> nomefile;
ifstream f(nomefile.c_str());

nuovoUtente86
30-10-2007, 16:41
a quale pezzo di codice mio ti riferisci?

cionci
30-10-2007, 16:47
a quale pezzo di codice mio ti riferisci?
Nel tuo secondo pezzo di codice...

Ricordati di mettere il linguaggio fra parentesi quadre nel titolo della discussione ;)

cimi88
30-10-2007, 19:37
Nel secondo c'è un errore perché non allochi spazio per contenere l'array di caratteri ;)

Si fa così:

string nomefile;
cin >> nomefile;
ifstream f(nomefile.c_str());

quoto...devi "trasformarelo" in char,atrimenti non funziona...e si fa attraverso il c_str()..

nuovoUtente86
31-10-2007, 17:43
Nel tuo secondo pezzo di codice...

Ricordati di mettere il linguaggio fra parentesi quadre nel titolo della discussione ;)

si avevo dimenticato di mettere il linguaggio.Però l' errore dovrebbe essere nel primo codice postate e non ne secondo.

cionci
01-11-2007, 10:15
si avevo dimenticato di mettere il linguaggio.Però l' errore dovrebbe essere nel primo codice postate e non ne secondo.
Evidentemente se ti crash l'errore c'è ;)

char* nomefile;
cin>>nomefile;
ifstream(nomefile)

Non allochi lo spazio per contenere il buffer di nomefile. Inoltre non essendo inizializzato ti va a tentare di scrivere in una zona di memoria protetta e ti crasha.