C/Appendice/Librerie standard/stdio.h: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
→‎remove(): Incollo da w:gets, testo scritto da Fripp il 25 apr 2007 come traduzione di quella che allora era la voce w:en:gets
Gian BOT (discussione | contributi)
m sostituzione tag obsoleti
Riga 142:
La funzione ''fflush'' viene usata per prevenire perdita di dati assicurando che i dati vengano scritti sullo stream. Dovrebbe esser usata solo per stream di output; altrimenti il comportamento è indefinito. Spesso ''fflush'' è usata sullo standard output, poiché questo è bufferizzato e l'output potrebbe non esser stampato immediatamente.
 
Una chiamata alla funzione <ttcode>fclose</ttcode> effettua di default il flushing dello stream.
 
=== fgetpos() ===
Riga 278:
| nome=ftell
| valoreritorno=long int
| descritorno=ritorna la posizione corrente nello stream, oppure <ttcode>-1L</ttcode> in caso di errore
| tipoparametro1=[[#FILE|FILE]]*
| nomeparametro1=stream
Riga 316:
}}
 
<ttcode>gets</ttcode> non effettua alcun bounds checking sull'input, quindi è una sorgente potenziale di buffer overflow nei programmi che la usano. Molte [[w:Man (Unix)|man pages]] della <ttcode>gets</ttcode> contengono il warning "''Never use gets''" [http://www.die.net/doc/linux/man/man3/gets.3.html] proprio a causa di questo difetto di design.
 
Anche se l'uso di <ttcode>gets</ttcode> non è ufficialmente deprecato da alcuno standard del C, il suo uso è scoraggiato; è mantenuta negli standard C89 e C99 per retrocompatibilità. Alcuni strumenti di sviluppo emettono warning quando viene linkato del codice che fa uso della funzione <ttcode>gets</ttcode>. La funzione <code>fgets(..., stdin)</code> è un sostituto di <ttcode>gets</ttcode> suggerito frequentemente.
 
Un uso sicuro di <ttcode>gets</ttcode> richiede che il programmatore si accerti che i buffer overflow non possano esser un problema. Il C standard non fornisce alcuno strumento per assicurare ciò; tuttavia, esiste un certo numero di modi relativamente complicati per assicurarlo, con diversi gradi di portabilità.
 
; Possibile implementazione
Riga 391:
| nomeparametro2=buf
| descparametro2=array da usare come buffer (almeno di dimensione [[#BUFSIZ|BUFSIZ]]), oppure [[#NULL|NULL]]
| descrizione=Imposta il buffer per lo stream ''stream''. Se il parametro ''buf'' è uguale a [[#NULL|NULL]], la funzione è equivalente a <ttcode>[[#setvbuf|setvbuf]](stream, [[#NULL|NULL]], [[#_IONBF|_IONBF]], 0)</ttcode>, altrimenti è equivalente a <ttcode>[[#setvbuf|setvbuf]](stream, buf, [[#_IOFBF|_IOFBF]], [[#BUFSIZ|BUFSIZ]])</ttcode>.
 
'''Nota''': la funzione [[#setvbuf()|setvbuf()]] è da preferire.