Siapa pun dapat menjelaskan secara sederhana bahasa Inggris tentang perbedaan antara printf, fprintfdan sprintfdengan contoh-contoh?
Aliran apa ini?
Saya benar-benar bingung antara ketiganya saat membaca tentang "Penanganan File di C".
Siapa pun dapat menjelaskan secara sederhana bahasa Inggris tentang perbedaan antara printf, fprintfdan sprintfdengan contoh-contoh?
Aliran apa ini?
Saya benar-benar bingung antara ketiganya saat membaca tentang "Penanganan File di C".
Jawaban:
Dalam C, "aliran" adalah abstraksi; dari perspektif program, ini hanyalah produsen (input stream) atau konsumen (output stream) byte. Ini dapat berhubungan dengan file pada disk, ke pipa, ke terminal Anda, atau ke beberapa perangkat lain seperti printer atau tty. The FILETipe berisi informasi tentang sungai. Biasanya, Anda tidak mengacaukan konten FILEobjek secara langsung, Anda hanya meneruskan sebuah pointer ke berbagai I / O rutinitas.
Ada tiga stream standar: stdinadalah pointer ke aliran input standar, stdoutadalah pointer ke aliran output standar, dan stderrmerupakan pointer ke aliran output kesalahan standar. Dalam sesi interaktif, ketiganya biasanya merujuk ke konsol Anda, meskipun Anda dapat mengarahkan mereka untuk menunjuk ke file atau perangkat lain:
$ myprog < inputfile.dat > output.txt 2> errors.txt
Dalam contoh ini, stdinsekarang menunjuk ke inputfile.dat, stdoutmenunjuk ke output.txt, dan stderrmenunjuk ke errors.txt.
fprintf menulis teks yang diformat ke aliran output yang Anda tentukan.
printfsetara dengan menulis fprintf(stdout, ...)dan menulis teks berformat ke mana pun aliran output standar saat ini menunjuk.
sprintfmenulis teks yang diformat ke array char, sebagai lawan aliran.
printf ("format", args) digunakan untuk mencetak data ke output standar yang sering merupakan monitor komputer.
sprintf (char *, "format", args) seperti printf. Alih-alih menampilkan string yang diformat pada output standar yaitu monitor, ia menyimpan data yang diformat dalam string yang ditunjukkan oleh pointer char (parameter pertama). Lokasi string adalah satu-satunya perbedaan antara sintaks printf dan sprint.
fprintf (FILE * fp, "format", args) seperti printf lagi. Di sini, alih-alih menampilkan data pada monitor, atau menyimpannya dalam beberapa string, data yang diformat disimpan pada file yang ditunjuk oleh penunjuk file yang digunakan sebagai parameter pertama untuk fprintf. Penunjuk file adalah satu-satunya tambahan untuk sintaks printf.
Jika file stdout digunakan sebagai parameter pertama di fprintf, maka kerjanya dianggap setara dengan file printf.
printf(...)setara dengan fprintf(stdout,...).
fprintf digunakan untuk output untuk streaming.
sprintf(buffer,...) digunakan untuk memformat string ke buffer.
Perhatikan ada juga vsprintf, vfprintfdanvprintf
vrasa tidak standar
vrasa sangat jelas dalam standar C.
Anda juga dapat melakukan hal-hal yang sangat berguna dengan fungsi 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)
vsnprintfini adalah fungsi yang tidak standar. Sebagian besar implementasi yang saya lihat menerapkan ini atau sesuatu seperti itu, tetapi implementasi khusus.
printf
printf("control string ", argument );fprintf
fprintf (filename, "control string ", argument );sprintf: Menulis data yang diformat ke string karakter dalam memori, bukan stdout
Sintaks sprintf adalah:
#include <stdio.h>
int sprintf (char *string, const char *format
[,item [,item]…]);
Sini,
String merujuk ke penunjuk ke buffer di memori tempat data akan ditulis.
Format mengacu pada penunjuk ke string karakter yang mendefinisikan format.
Setiap item adalah variabel atau ekspresi yang menentukan data untuk ditulis.
Nilai yang dikembalikan oleh sprintf lebih besar dari atau sama dengan nol jika operasi berhasil atau dengan kata lain jumlah karakter yang ditulis, tidak termasuk karakter nol terminating dikembalikan dan mengembalikan nilai kurang dari nol jika terjadi kesalahan.
printf: Mencetak ke stdout
Sintaks untuk printf adalah:
printf format [argument]…
Satu-satunya perbedaan antara sprintf () dan printf () adalah sprintf () menulis data ke dalam array karakter, sedangkan printf () menulis data ke stdout, perangkat output standar.