Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1

    [C++] Inserimento Stringa...

    Ho notato che cin>> per le stringhe ha lo stesso difetto di scanf()
    cosa uso per prendere una stringa in c++ ?

  2. #2

  3. #3
    Originariamente inviato da nightfall
    ???
    Che intendi?
    Se intendi che vuoi una stringa con gli spazi, usa il get()

  4. #4
    get() o gets()
    la mia domanda era c'e' una funzione simile a gets() per il c++ ?

  5. #5
    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...

  6. #6
    Ma non c'e' una funzione aaposita in c++ che sostituisce gets() ?
    Come printf() che viene sostitutita da cout << "";

  7. #7
    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..

  8. #8

    getline

    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);

  9. #9
    Utente bannato
    Registrato dal
    Sep 2003
    Messaggi
    1,012
    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..
    Il gets ha il problema che non effettua alcun controllo sulla lunghezza dell' array.

    Per esempio in questo codice

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

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

  10. #10

    Array?

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

    codice:
    #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:

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

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.