Xcode ed il "gets"

di Anonimizzato9917 il
5 risposte
Ciao,

programmo con xcode in c, nell'andare avanti con lo studio mi sono imbattuto nel gets puts...
ora, il problema con xcode è che non digerisce un gran che bene questo comando (almeno questo capita a me!! ).

ad esempio:
    printf("Inserisci il testo\n");
    gets(string);   /*questo gets serve solo perchè non si blocchi xcode*/
    gets(string);
devo fare un accrocchio del genere perché se ne metto solo uno, lo salta, non aggiornando l'array string.
e questo capita solo per il primo gets che metto nel codice, per tutti i successivi non è necessario rimetterlo 2 volte!!
questo è l'errore che mi da quando legge il primo gets: "warning: this program uses gets(), which is unsafe."
qualcuno ha rilevato problemi del genere???

5 Risposte

  • Deprecata, usa fgets
  • RISOLTO credo...
    praticamente il problema sembra che stia nel fatto che dopo il gets della prima stringa non inserivo subito il terminale '\0' ma richiedevo l'inserimento della seconda stringa e poi terminavo ogni stringa con \0...
    spero di aiutare anche altri...
  • Non aiuti nemmeno te stesso se continui a usare gets(). E' l'unica funzione ufficialmente deprecata dallo standard, cosa che nemmeno l'infame goto è riuscito a fare. Continuare a usarla equivale a girare con un cerino acceso in mano in una polveriera, sperando di non saltare in aria.
    Francamente non capisco perché i produttori di compilatori non si decidono a toglierla una volta per tutte.
  • Ok, sarà anche deprecata, ma se mi spiegate cosa altro usare e come usarlo soprattutto...
  • Il problema della gets è che non effettua nessun controllo sulla lunghezza del buffer in cui scrive per cui può scrivere oltre i limiti con effetti disastrosi e difficili da sistemare, non riesci a capire cosa succede, il comportamento è anomalo e a volte modificando una riga il comportamento cambia incomprensibilmente (magari è quello che ti capitava quando scrivevi la doppia get).

    Al posto della gets(char* s) puoi usare:
    
    char buffer[20];
    fgets(buffer, 20, stdin);
    
    oppure:
    
    string s;
    cin >> s;
    
Devi accedere o registrarti per scrivere nel forum
5 risposte