Newsgroup: it.comp.lang.c
Titolo: fgets

A quale scopo inserisce lo '\n' alla fine del vettore?
Marcello

 A quale scopo inserisce lo '\n' alla fine del vettore?
Non e' che e' la fgets ad inserire il newline ma e' perche' lo legge dal 
file.
Se hai una linea di testo "Prova" terminata dal newline, su Dos/Win 
avrai nel buffer:
'P' 'r' 'o' 'v' 'a' '\r' '\n' '\0'  <--- carattere null
Se la riga invece fosse l'ultima del file e magari non fosse terminata 
dal newline avresti solo il carattere null.
Ti conviene "strippare" via eventuali \r o \n.

 A quale scopo inserisce lo '\n' alla fine del vettore?
Ehmmm...
Naturalmente "prima" dello '\0'...
Quindi "non" alla fine...
Chiedo venia.
Marcello

 Ti conviene "strippare" via eventuali \r o \n.
E infatti "strippo" (se ho capito bene il senso del termine: puntare lo 
'\n' e sostiruirlo ogni volta con uno '\0'), ma mi chiedevo...
Perche' tanto "strippare"? ;P
Inoltre pare che la fgets non abbia solo questo problema:
"Don’t use it to read files edited by the user because, if the user
inserts a null character, you should either handle it properly or print
a clear error message. We recommend using getline instead of fgets".
Sembrerebbe che fgets non sia stata progettata per leggere
da files editati da utenti. E' così? Il motivo e' solo la possibile 
immissione del carattere nullo da parte dell'utente?
Anche la getline, comunque, inserisce un new line prima del carattere di
fine stringa. :(
"This function reads an entire line from stream, storing the text
(including the newline and a terminating null character) in a buffer and
storing the buffer address in *lineptr".
Quindi, da quel che ho capito, non esiste in C una funzione che legge
una stringa da file "senza" aggiungere lo '\n', perche' tale carattere
viene letto dal file stesso.
Marcello

 da files editati da utenti. E' così?
Che significa, "editati da utenti" ? fgets() va bene per leggere da
file di testo e un file di testo non contempla di certo il carattere
nullo.

 nullo.
Quindi la storia dell'inserimento del carattere nullo da parte 
dell'utente e' una panzana bella e buona.
Marcello

 dell'utente e' una panzana bella e buona.
Be', fammi vedere se tu sei capace di inserire un carattere nullo da
Notepad ;-)

 Notepad ;-)
Qui si preannuncia un cambio repentino di "manuale"... ;-P
Marcello

 Notepad ;-)
Uhmmm...
Non e' che per caso intendesse dire:
"... file editati da utenti, ma i cui caratteri sono presi in input e 
poi scritti nel file di testo... "?
In questo caso, se non sbaglio, potrei scrivere un carattere nullo in un 
file di testo, giusto?
Marcello

 file di testo, giusto?
Un file di testo che presenti un carattere nullo non è più un file di
testo.

 testo.
Perche' affermi questo? Io col mio editor di testo inserisco tutti i 256
ascii possibili, \0 compreso. Non e' solo il modo in cui vengono
interpretati i caratteri di fine linea (LF su *nix, CRLF in dos/windows,
CR su Mac e C64) a distinguere un file testo da un file binario?
Un file testo unicode non e' testo?
O ti stai limitando al fatto che da C non puoi leggere con fgets una
riga contenente un carattere nullo perche' ovviamente e' il terminatore
di stringa?
-- 
-=[]=---iAN CooG/HokutoForce+TWT---=[]=-
C= is better than C++

 CR su Mac e C64) a distinguere un file testo da un file binario?
Un file di testo generalmente comprende i caratteri stampabili, ovvero
quelli compresi in un range ASCII preciso.  Un file Unicode è un caso
a parte, di fatto non è un file di testo come comunemente viene inteso
(e difatti ti sfido a modificare un file DSN contenente i dati di una
connessione ADO, ad esempio, con Notepad, otterrai immondizia come
risultato).  Molti programmi (vedi CVS, ad esempio), eseguono le
distinzioni testo/binario proprio in virtù del fatto che il file
contenga o meno certi caratteri.

 con Notepad
Ma hai la fissa per 'sto notepad, manco fosse l'unico esempio di text
editor :) Pero' e' vero che se un file viene rovinato dal salvataggio da
Notepad, non era un file conforme alla definizione di file di testo *per
notepad*.
-- 
-=[]=---iAN CooG/HokutoForce+TWT---=[]=-
And God said: E = 1/2mv^2 - Ze^2/r, and there was light!

 editor :)
Cito Notepad perché è il caso più semplice di text editor, quello che
vale per Notepad vale sicuramente per tutti gli altri.