Più corto della riga da leggere.
Nah, sono abbastanza sicuro che sia come dico, è un pattern diffuso.Temo che non sia esattamente questa l'intenzione dell'estensore, colpa mia per aver tagliato la nota all'esempio (ma era solo la prima parte rilevante per il mio dubbio):
Non capisco cosa non ti è chiaro... se vuoi accorciare la "lunghezza logica" di una stringa basta che rimpiazzi il carattere a cui vuoi farla terminare con un \0; nel caso specifico, visto che la fgets ti restituisce un \n in coda, lo rimpiazzi con un \0, in modo da farlo sparire, scorciando la stringa di un carattere.E comunque questa parte non mi sembrava/sembra molto chiara: il fatto che \n sia messo alla fine della stringa non sembra reggere col fatto che \0 lo rimpiazzi una posizione prima della fine della stessa. Per il resto mi sembra che volesse dire qualcosa tipo non terminare la stringa con '...\n\0', cioè se la si vuole terminare con esattamente l'ultimo carattere di input visualizzato sullo schermo.
La risposta di oregon andrebbe bene se non fosse che strtok non è né rientrante né thread-safe, per cui in linea di massima va evitata. Piuttosto, si può sfruttare la funzione (sconosciuta ai più, me compreso) strcspn:
(strcspn(s, reject) restituisce la lunghezza del primo segmento di s che non contiene nessuno dei caratteri di reject, che è perfetta per il nostro caso, dato che di fatto restituisce la posizione del newline o, se non è presente, del NUL finale).codice:nome[strcspn(nome, "\n")] = 0;


) strcspn:
Rispondi quotando
