Разница между fprintf, printf и sprintf?
8 ответов
в C "поток" является абстракцией; с точки зрения программы это просто производитель (входной поток) или потребитель (выходной поток) байтов. Он может соответствовать файлу на диске, трубе, терминалу или другому устройству, такому как принтер или tty. The FILE
type содержит информацию о потоке. Обычно вы не связываетесь с FILE
содержимое объекта напрямую, вы просто передаете указатель на него различным процедурам ввода-вывода.
есть три стандартные потоки: stdin
- это указатель на стандартный входной поток, stdout
является указателем на стандартный выходной поток и stderr
указатель на стандартный поток вывода ошибок. В интерактивном сеансе эти три обычно ссылаются на вашу консоль, хотя вы можете перенаправить их на другие файлы или устройства:
$ myprog < inputfile.dat > output.txt 2> errors.txt
в этом примере stdin
Теперь указывает на inputfile.dat
, stdout
указывает на output.txt
и stderr
указывает на errors.txt
.
fprintf
записывает форматированный текст в указанный поток вывода.
printf
эквивалентно записи fprintf(stdout, ...)
и записывает форматированный текст туда,куда указывает стандартный выходной поток.
sprintf
записывает форматированный текст в массив char
, в отличие от потока.
printf
выходы в стандартный выходной поток (stdout
)
fprintf
переходит к дескриптору файла (FILE*
)
sprintf
переходит к буферу, который вы выделили. (char*
)
printf("формат", args) используется для печати данных на стандартный вывод, который часто является монитором компьютера.
sprintf(char *, "format", args) похоже на printf. Вместо отображения формированной строки на стандартном выходе, т. е. мониторе, он хранит формированные данные в строке, на которую указывает указатель char (самый первый параметр). Расположение строки-единственное различие между printf и sprint синтаксис.
fprintf(файл *fp, "формат", args) снова похож на printf. Здесь вместо отображения данных на мониторе или сохранения их в какой-либо строке формируемые данные сохраняются в файле, на который указывает указатель файла, который используется в качестве первого параметра fprintf. Указатель файла является единственным дополнением к синтаксису printf.
Если стандартный вывод файл используется в качестве первого параметра в fprintf, затем рассматривается его работа эквивалентно printf.
printf(...)
эквивалентно fprintf(stdout,...)
.
fprintf
используется для вывода в поток.
sprintf(buffer,...)
используется для форматирования строки в буфер.
обратите внимание, что есть также vsprintf
, vfprintf
и vprintf
вы также можете делать очень полезные вещи с функцией 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
- функции printf используется для выполнения вывода на экран.
- синтаксис =
printf("control string ", argument );
- Он не связан с вводом/выводом файла
fprintf
- fprintf, используемый для выполнения операции записи в файле, на который указывает дескриптор файла.
- синтаксис
fprintf (filename, "control string ", argument );
- это связано с вводом/выводом файла
fprintf
Это связано с потоками, где as printf
является утверждением, подобным fprintf
но не связанные с потоками, то есть fprintf
is file related
sprintf: записывает форматированные данные в символьную строку в памяти вместо stdout
синтаксис sprintf:
#include <stdio.h>
int sprintf (char *string, const char *format
[,item [,item]…]);
здесь
String ссылается на указатель на буфер в памяти, где должны быть записаны данные.
Format ссылается на указатель на символьную строку, определяющую формат.
каждый элемент является переменной или выражением, определяющим данные для записи.
значение, возвращаемое sprintf, больше, чем или равно нулю, если операция выполнена успешно или, другими словами, количество символов, записанных, не считая завершающий нулевой символ возвращается и возвращает значение меньше нуля, если произошла ошибка.
printf: печать в stdout
синтаксис для printf:
printf format [argument]…
единственное различие между sprintf () и printf () заключается в том, что sprintf() записывает данные в массив символов, а printf () записывает данные в stdout, стандартный вывод устройство.