Xcode ed il "gets"

di il
5 risposte

Xcode ed il "gets"

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

  • Re: Xcode ed il "gets"

    Deprecata, usa fgets
  • Re: Xcode ed il "gets"

    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...
  • Re: Xcode ed il "gets"

    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.
  • Re: Xcode ed il "gets"

    Ok, sarà anche deprecata, ma se mi spiegate cosa altro usare e come usarlo soprattutto...
  • Re: Xcode ed il "gets"

    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