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++ - funzionamento dell cin.getline
Forum - C/C++ - funzionamento dell cin.getline

Avatar
el cuba libre (Normal User)
Newbie


Messaggi: 20
Iscritto: 07/03/2011

Segnala al moderatore
Postato alle 14:09
Lunedì, 22/08/2011
ciao
ho bisogno di prendere in input vari nomi di ospedali e dato che molti ospedali hanno nomi "separati" come per esempio San Raffaele,San Nicola e cosi via ho pensato di usare il cin.getline che non dovrebbe tener conto degli spazi bianchi. ho però dei problemi questo è il pezzo di codice che ho scritto
Codice sorgente - presumibilmente C/C++

  1. element istanza[5];
  2. char *nome=new char[25];
  3. cout<<"inserisci il nome dell'ospedale"<<endl;
  4. cin.getline(nome,(strlen(nome)));
  5. istanza[1].impostanome(nome);


allora element è la classe e istanza, con molta fantasia, è l'istanza della classe. avrei bisogno che qualcuno mi dicesse con esattezza cosa ritorna da questa funzione e cosa passo esattamente al metodo impostanome che fa parte della classe element.
grazie mille!

PM
Avatar
comina8 (Normal User)
Pro


Messaggi: 86
Iscritto: 18/06/2011

Up
1
Down
V
Segnala al moderatore
Postato alle 15:47
Lunedì, 22/08/2011
Codice sorgente - presumibilmente C/C++

  1. #define MAX 25
  2. char *Str=new char[MAX];
  3. std::cout<<"Inserisci la stringa: ";
  4. std::cin.getline(Str,MAX);
  5. std::cout<<"Hai inserito "<<Str;



Questo pezzo di codice riceve una stringa in input e la stampa con il metodo da te desiderato (con spazi e altro).
Se impostanome è dichiarata così:

element::impostanome(char *Str); o Str[]
oppure
element::impostanome(char Str[MAX];

Funziona.

PS: Ti conviene sempre passare un numero alle funzione e non sizeof(Puntatore), in alcuni casi non funziona e lascio ai più esperti la spiegazione (non mi sono mai interessato a capire il perché...)

PM
Avatar
lorenzo (Normal User)
Guru


Messaggi: 1178
Iscritto: 15/04/2008

Up
1
Down
V
Segnala al moderatore
Postato alle 19:53
Lunedì, 22/08/2011
La funzione strlen ritorna la lunghezza di una stringa e, per terminare l'esecuzione, sfrutta il carattere '\0' come terminatore di stringa.
Passando in ingresso una stringa non ancora inizializzata, ma solo allocata, questo terminatore non è presente, quindi la strlen non sa quando fermarsi e potresti anche andare in buffer overflow.

Si in effetti potevo anche arrivarci XD - comina8 - 22/08/11 22:51
PM