Puntatori c++

di il
21 risposte

Puntatori c++

Salve a tutti, mi potreste spiegare il perché di queste operazioni:


char* x=new char;

cin>>x;  //perchè lo posso fare

int* y=new int;

cin>>y;  //perchè non lo posso fare


21 Risposte

  • Re: Puntatori c++

    L'operatore >> traduce l'input nel format corretto. Esiste l'overload per il char * (cioè array di caratteri) ma non esiste l'overload per int *.
    Anche se cin >> x lo puoi fare questo non avrà nessun risultato in quanto hai chiesto spazio solo per un carattere nella stringa puntatata da x e in una stringa l'ultimo caratere (che è anche l'unico) è riservato al '\0'.
    Quindi anche se il copilatore non te lo da come errore non puoi assegnare niente al x.
  • Re: Puntatori c++

    Ciao, a ok capito, solo una cosa, come dovrei fare se voglio fare che con cin>>x leggo quanti caratteri voglio, in modo dinamico ecco
  • Re: Puntatori c++

    
    #include <string>
    .......
    std::string x;
    //così si ferma al primo spazio
    cin >> x;
    
    //così si ferma al \n
    std::getline(cin,x);
    
  • Re: Puntatori c++

    Non capisco cioé se ho una variabile stringa , io so che si fa la cin normale e va tutto bene.
  • Re: Puntatori c++

    Riesci a spiegare meglio cos'è che non capisci. non riesco a seguirti.
  • Re: Puntatori c++

    Cioè nel senso, se devo leggere una stringa , io faccio così:
    
    
    string x;
    
    cin>>x;
    
    Non capisco perché hai fatto in quel modo
  • Re: Puntatori c++

    E se devi leggere una stringa dall'input che contiene anche spazi?
  • Re: Puntatori c++

    No una siringa normale senza spazi.
    In pratica io volevo simulare la lettura di una stringa usando il puntatore a char, in poche parole
  • Re: Puntatori c++

    Nessuno?
  • Re: Puntatori c++

    Non puoi in maniera dinamica se non allocando uno spazio grande a sufficienza. Una cosa del tipo
    
    char * str = new char[1000];
    cin >> str;
    //uso str
    ....
    delete [] str;
    
    Ecco perche bisogna creare una classe o meglio non re-inventare la ruota e usare la classe std::string così
    
    std::string temp;
    cin >> temp;
    char *str = new char[temp.length() + 1];
    strcpy(str,temp.c_str());
    //uso str
    ......
    //poi elimino lo spazio allocato
    delete [] str;
    
  • Re: Puntatori c++

    NOn capisco una cosa, cioè se usi la classe string perchè fai tutto quel procedimento,con la classe string non bassa fare una cin e basta?
  • Re: Puntatori c++

    In pratica io volevo simulare la lettura di una stringa usando il puntatore a char, in poche parole
    Questa era la tua domanda e la mia risposa si riferiva a quella. un puntatore a char è il char * non la classe std::string.
    se vuoi usare la classe string e basta allora il cin è sufficiente.
  • Re: Puntatori c++

    A ok quindi in pratica se volessi simulare la lettura di una stringa usando un puntatore a char dovrei fare così:
    
    
    char *str = new char[temp.length() + 1];
    strcpy(str,temp.c_str());
    
    
    Ho capito bene?
  • Re: Puntatori c++

    Così è più completo.
    std::string temp;
    cin >> temp;
    char *str = new char[temp.length() + 1];
    strcpy(str,temp.c_str());
    //uso str
    ......
    //poi elimino lo spazio allocato
    delete [] str;
Devi accedere o registrarti per scrivere nel forum
21 risposte