2012-02-16 19 views
11

printf La función en c no siempre imprime la salida en la pantalla. Por ejemplo, si olvida poner \ n al final de la cadena que está imprimiendo, a veces no obtiene el o/p. ¿Hay algunas otras condiciones cuando printf no imprime? Recuerdo que alguien dijo que hay 7 de esas condiciones. ¿Pueden ayudarme?¿Cuándo no se imprime printf?

+5

¿Seguro que está pensando en 'printf', y no las condiciones previas del apocalipsis? –

+3

@KerrekSB ¿O tal vez los signos de una tarea inminente con 7 elementos? – cnicutar

+1

Esto parece específico de la plataforma, depende del dispositivo de salida. ¿Qué sistema operativo y sistema estás usando? –

Respuesta

14

La salida estándar es una transmisión en búfer, no está garantizado que se enjuague a menos que se coloque una nueva línea, la transmisión esté cerrada o el programa salga normalmente. Si el programa sale anormalmente, es posible que la transmisión no se descargue. La salida estándar está almacenada en línea, por lo que una línea nueva la vaciará. Hay almacenamientos intermedios que no se nivelarán con una nueva línea.

+0

Sé que esta es una pregunta muy antigua, pero ¿qué tipo de cosas pueden inhibir un 'printf' de impresión? – Mouin

0

Como user1214634 dicho stdout está almacenado en el búfer y solo se imprime en la pantalla bajo ciertas condiciones. Si desea forzarlo a imprimir puede llamar a fflush (stdout)

7

no es que printf no siempre se imprimirá, es que no se garantiza que se imprima inmediatamente. Esto significa que si lo está utilizando con fines de depuración, no puede garantizar que sucederá exactamente cuando lo haga en el código. Si desea asegurarse de que se imprime exactamente cuando lo dijo, llame al fflush(stdout).

Nota: Por lo general, no desea utilizar fflush(stdout) a menos que se está depurando, es realmente muchos recursos y si se preocupan por el rendimiento de velocidad en todo lo que tiene el potencial de reducir la velocidad.

1

No es otro caso especial yo sólo encontré:

Mis variables son:

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

y tratar

printf $line 
printf $line2 

Ni va a funcionar. El segundo suelta la palabra "horas" y el primero confunde -24 como indicador.

Por lo tanto, cada vez que use printf que eliminará todos los caracteres peligrosos, si es posible, mediante el uso de

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

deseo códigos de printf pueden ser mejorados por el desarrollador.

Tener cuidado

+0

Estoy confundido, ¿cómo es esto c? –

Cuestiones relacionadas