65 votos

¿diferencia entre fprintf, printf, sprintf?

¿alguien puede decirme en inglés la diferencia entre printf, fprintf, sprintf con un ejemplo?

¿qué es la corriente en ella?

Estoy realmente confundido entre tres de esto al leer "File Handling in C"

94voto

John Bode Puntos 33046

En C, un "flujo" es una abstracción, y 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. La página web FILE contiene información sobre el flujo. Normalmente, no se juega con un FILE directamente el contenido del objeto, sólo hay que pasarle 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 suelen referirse 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 señala output.txt y stderr señala errors.txt .

fprintf escribe el texto formateado en el flujo de salida que usted especifique.

printf equivale a escribir fprintf(stdout, ...) y escribe el texto formateado en el lugar al que apunta el flujo de salida estándar.

sprintf escribe el texto formateado en un Array de char en lugar de una corriente.

74voto

Moo-Juice Puntos 22190

printf sale al flujo de salida estándar ( stdout )

fprintf se dirige a un gestor de archivos ( FILE* )

sprintf va a un buffer que usted asignó. ( char* )

11voto

VGE Puntos 2969

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

fprintf se utiliza para dar salida al flujo.

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

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

2voto

Maxim Yegorushkin Puntos 29380

También puedes 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)

0voto

kavamsi12 Puntos 1

fprintf Esto está relacionado con las corrientes donde como printf es una declaración similar a fprintf pero no relacionados con los arroyos, es decir fprintf está relacionado con el archivo

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X