and c io stream printf

and - printf c++



Diferencia entre fprintf, printf y sprintf? (8)

¿Alguien puede explicar en inglés simple las diferencias entre printf , fprintf y sprintf con ejemplos?

¿En qué corriente está?

Estoy realmente confundido entre los tres al leer 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 tty. El tipo de FILE contiene información sobre la transmisión. Normalmente, no se entromete con los contenidos de un objeto FILE directamente, simplemente le pasa un puntero a las diversas 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 generalmente hacen referencia a su consola, aunque puede 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 la secuencia de salida que especifique.

printf es equivalente a escribir fprintf(stdout, ...) y escribe texto formateado dondequiera que esté apuntando la corriente de salida estándar.

sprintf escribe texto formateado en una matriz de caracteres, a diferencia de una secuencia.


También puede hacer cosas muy útiles con la función vsnprintf ():

$ cat test.cc #include <exception> #include <stdarg.h> #include <stdio.h> struct exception_fmt : std::exception { exception_fmt(char const* fmt, ...) __attribute__ ((format(printf,2,3))); char const* what() const throw() { return msg_; } char msg_[0x800]; }; exception_fmt::exception_fmt(char const* fmt, ...) { va_list ap; va_start(ap, fmt); vsnprintf(msg_, sizeof msg_, fmt, ap); va_end(ap); } int main(int ac, char** av) { throw exception_fmt("%s: bad number of arguments %d", *av, ac); } $ g++ -Wall -o test test.cc $ ./test terminate called after throwing an instance of ''exception_fmt'' what(): ./test: bad number of arguments 1 Aborted (core dumped)


printf

  1. printf se usa para realizar salida en la pantalla.
  2. sintaxis = printf("control string ", argument );
  3. No está asociado con la entrada / salida de archivo

fprintf

  1. El fprintf que utilizó para realizar la operación de escritura en el archivo apuntado por el controlador FILE.
  2. La sintaxis es fprintf (filename, "control string ", argument );
  3. Está asociado a la entrada / salida de archivos

sprintf: escribe datos formateados en una cadena de caracteres en la memoria en lugar de stdout

La sintaxis de sprintf es:

#include <stdio.h> int sprintf (char *string, const char *format [,item [,item]…]);

Aquí,

Cadena se refiere al puntero a un búfer en la memoria donde se escribirán los datos.

El formato se refiere al puntero a una cadena de caracteres que define el formato.

Cada elemento es una variable o expresión que especifica los datos para escribir.

El valor devuelto por sprintf es mayor o igual a cero si la operación es exitosa o, en otras palabras, se devuelve el número de caracteres escritos, sin contar el carácter nulo de terminación, y devuelve un valor menor que cero si se produce un error.

printf: Imprime en stdout

La sintaxis para printf es:

printf format [argument]…

La única diferencia entre sprintf () y printf () es que sprintf () escribe datos en una matriz de caracteres, mientras que printf () escribe datos en stdout, el dispositivo de salida estándar.


fprintf Esto está relacionado con las secuencias donde printf es una declaración similar a fprintf pero no está relacionada con las secuencias, es decir, fprintf está relacionado con archivos


printf(...) es equivalente a fprintf(stdout,...) .

fprintf se usa para dar salida a la transmisión.

sprintf(buffer,...) se usa para formatear una cadena en un buffer.

Tenga en cuenta que también hay vsprintf , vfprintf y vprintf


printf salidas a la corriente de salida estándar ( stdout )

fprintf va a un manejador de archivo ( FILE* )

sprintf va a un buffer que asignaste. ( char* )


printf ("formato", args) se utiliza para imprimir los datos en la salida estándar, que a menudo es un monitor de computadora.

sprintf (char *, "format", args) es como printf. En cambio, al mostrar la cadena formateada en la salida estándar, es decir, un monitor, almacena los datos formateados en una cadena apuntada por el puntero char (el primer parámetro). La ubicación de la cadena es la única diferencia entre la sintaxis printf y sprint.

fprintf (FILE * fp, "formato", args) es como printf nuevamente. Aquí, en cambio, al mostrar los datos en el monitor o guardarlos en alguna cadena, los datos formateados se guardan en un archivo apuntado por el puntero de archivo que se usa como primer parámetro para fprintf. El puntero del archivo es la única adición a la sintaxis de printf.

Si el archivo stdout se utiliza como el primer parámetro en fprintf, su funcionamiento se considera equivalente al de printf.