2012-02-16 11 views
11

La funzione printf in c non stampa sempre l'output sullo schermo. Ad esempio, se ti dimentichi di mettere \ n alla fine della stringa che stai stampando, a volte non ottieni l'o/p. Ci sono altre condizioni quando printf non stampa. Ricordo qualcuno che diceva che ci sono 7 condizioni del genere. Ragazzi, per favore aiutatemi.Quando printf non riesce a stampare?

+5

Sei sicuro di pensare a 'printf' e non alle precondizioni dell'apocalisse? –

+3

@KerrekSB O forse i segni di un imminente compito con 7 elementi? – cnicutar

+1

Questo sembra specifico per la piattaforma, dipende dal dispositivo di output. Che sistema operativo e sistema stai usando? –

risposta

14

Standard out è un flusso bufferizzato, non è garantito lo svuotamento a meno che non venga inserito un newline, lo stream sia chiuso o il programma esca normalmente. Se il programma termina in modo anomalo, è possibile che lo stream non si scarichi. Lo standard out è il buffer di riga, motivo per cui un nuovo carattere lo svuoterà. Ci sono buffer che non si svuotano con una nuova riga.

+0

So che questa è una domanda molto vecchia ma che tipo di cosa può inibire un 'printf' di stampa? – Mouin

0

As user1214634 detto stdout è memorizzato nel buffer e stampa solo sullo schermo in determinate condizioni. Se si desidera forzare la stampa, è possibile chiamare fflush (stdout)

7

non è che printf non stampa sempre, è che non è garantito stampare immediatamente. Ciò significa che se lo si utilizza per scopi di debug, non è possibile garantire che ciò accada esattamente quando lo fa nel codice. Se vuoi assicurarti che stampi esattamente quando hai detto chiama fflush(stdout).

Nota: In genere non si desidera utilizzare fflush(stdout) a meno che non si esegue il debug, la sua risorsa davvero intenso e se vi preoccupate per prestazioni di velocità a tutto ciò che ha il potenziale per rallentare se.

1

c'è un altro caso particolare ho appena incontrato:

mie variabili sono:

line="-24 hours" 
line2="24 hours" 

e cercare

printf $line 
printf $line2 

Né funzionerà. Il secondo abbandona la parola "ore" e il primo errore -24 come una bandiera.

Pertanto, ogni volta che uso printf che rimuoverà tutti i personaggi pericolosi, se possibile, utilizzando

sed -r "s/[/\ #;&~]/_/g" 

desidero codici di printf possono essere migliorate dallo sviluppatore.

Fare attenzione

+0

Sono confuso, come è questo c? –

Problemi correlati