¿Diferencia entre fprintf, printf y sprintf?
¿Alguien puede explicar en inglés sencillo las diferencias entre printf
, fprintf
y sprintf
con ejemplos?
¿En qué corriente está?
Estoy realmente confundido entre los tres mientras leo sobre "Manejo de archivos en C".
En C, una "corriente" es una abstracción; desde la perspectiva del programa es simplemente un productor (flujo de entrada) o consumidor (flujo de salida) de bytes. Puede corresponder a un archivo en el disco, a una tubería, a su terminal o a algún otro dispositivo como una impresora o un tty. El FILE
tipo contiene información sobre la transmisión. Normalmente, no interviene FILE
directamente con el contenido de un objeto, simplemente le pasa un puntero a las distintas rutinas de E/S.
Hay tres flujos estándar: stdin
es un puntero al flujo de entrada estándar, stdout
es un puntero al flujo de salida estándar y stderr
es un puntero al flujo de salida de error estándar. En una sesión interactiva, los tres normalmente hacen referencia a tu consola, aunque puedes redirigirlos para que apunten a otros archivos o dispositivos:
$ myprog < inputfile.dat > output.txt 2> errors.txt
En este ejemplo, stdin
ahora apunta a inputfile.dat
, stdout
apunta a output.txt
y stderr
apunta a errors.txt
.
fprintf
escribe texto formateado en el flujo de salida que especifique.
printf
es equivalente a escribir fprintf(stdout, ...)
y escribe texto formateado hacia donde apunta actualmente el flujo de salida estándar.
sprintf
escribe texto formateado en una matriz de char
, a diferencia de una secuencia.
printf
salidas al flujo de salida estándar ( stdout
)
fprintf
va a un identificador de archivo ( FILE*
)
sprintf
va a un búfer que usted asignó. ( char*
)
printf(const char *format, ...)
se utiliza para imprimir los datos en la salida estándar, que suele ser un monitor de computadora.sprintf(char *str, const char *format, ...)
es comoprintf
. En lugar de mostrar la cadena formateada en la salida estándar, es decir, un monitor, almacena los datos formateados en una cadena señalada por el puntero char (el primer parámetro). La ubicación de la cadena es la única diferencia entre la sintaxis de printf y sprint.fprintf(FILE *stream, const char *format, ...)
es comoprintf
otra vez. Aquí, en lugar de mostrar los datos en el monitor o guardarlos en alguna cadena, los datos formateados se guardan en un archivo al que apunta el puntero de archivo que se utiliza como primer parámetrofprintf
. El puntero de archivo es la única adición a la sintaxis deprintf
.
Si stdout
el archivo se utiliza como primer parámetro en fprintf
, su funcionamiento se considera equivalente al de printf
.