Saya tahu Anda dapat mencetak dengan printf()
dan puts()
. Saya juga bisa melihat yang printf()
memungkinkan Anda untuk menginterpolasi variabel dan melakukan pemformatan.
Ini puts()
hanyalah versi primitif dari printf()
. Haruskah digunakan untuk setiap kemungkinan printf()
tanpa interpolasi string?
printf(variable)
untuk mencetak string. Gunakanputs(variable)
atauprintf("%s', variable)
. Ada risiko keamanan dalam menggunakan string format variabel: jika variabel dapat ditulis oleh penyerang mereka dapat menyerang program dengan menggunakan string format.Jawaban:
puts
lebih sederhana daripadaprintf
tetapi perlu diketahui bahwa yang pertama secara otomatis menambahkan baris baru. Jika bukan itu yang Anda inginkan, Anda dapatfputs
menggunakan string atau stdout Andaprintf
.sumber
(Ini ditunjukkan dalam komentar oleh Zan Lynx, tapi saya pikir ini layak mendapat jawaban - karena jawaban yang diterima tidak menyebutkannya).
Perbedaan mendasar antara
puts(mystr);
danprintf(mystr);
adalah bahwa dalam argumen terakhir ditafsirkan sebagai string pemformatan . Hasilnya akan sering sama (kecuali untuk baris baru yang ditambahkan) jika string tidak mengandung karakter kontrol apa pun (%
) tetapi jika Anda tidak dapat mengandalkan itu (jikamystr
merupakan variabel, bukan literal) Anda tidak boleh menggunakannya.Jadi, umumnya berbahaya - dan salah secara konsepsi - melewatkan string dinamis sebagai argumen tunggal
printf
:Hal yang sama berlaku untuk
fputs
vsfprintf
(tetapifputs
tidak menambahkan baris baru).sumber
printf()
menjadi kurang efisien? Saat berjalan? Pada waktu kompilasi?printf
perlu mengurai format string. Namun, ini seharusnya tidak relevan. Lebih lanjut, kompiler yang cerdik dapat mengoptimalkan ini, dan menggantiprintf
panggilan denganputs
Selain memformat,
puts
mengembalikan bilangan bulat non-negatif jika berhasil atauEOF
jika tidak berhasil; sementaraprintf
mengembalikan jumlah karakter yang dicetak (tidak termasuk nol tertinggal).sumber
Dalam kasus sederhana, kompiler mengubah panggilan menjadi
printf()
keputs()
.Misalnya, kode berikut akan dikompilasi ke kode perakitan yang saya tunjukkan selanjutnya.
Dalam contoh ini, saya menggunakan GCC versi 4.7.2 dan mengkompilasi sumbernya
gcc -o hello hello.c
.sumber
printf("Hello world!\n");
gcc memang menerjemahkannya untuk menempatkan. Karena ini adalah pesan lama, saya akan mengeditnya sendiri.-save-temps
opsi untuk gcc melakukan ituBenar,
printf
bisa dianggap sebagai versi yang lebih kuatputs
.printf
menyediakan kemampuan untuk format yang variabel untuk output menggunakan format specifiers seperti%s
,%d
,%lf
, dll ...sumber
Dalam pengalaman saya,
printf()
mengangkut lebih banyak kode daripadaputs()
terlepas dari format string.Jika saya tidak membutuhkan format, saya tidak menggunakan
printf
. Namun,fwrite
untukstdout
bekerja jauh lebih cepat daripadaputs
.Catatan: per komentar, '\ 0' adalah konstanta integer. Ekspresi yang benar harus
sizeof(char)
seperti yang ditunjukkan oleh komentar.sumber
'\0'
memiliki tipeint
, jadi pada kebanyakan sistem ini akan mencetakUsing fwrit
. Jika Anda ingin mencetak 1 byte lebih sedikit, gunakan saja 1.sizeof (char)
, yang kemungkinan Anda maksudkan di sini, dijamin menjadi 1.puts () menulis string s dan baris baru yang tertinggal ke stdout.
Fungsi printf () menulis output ke stdout, di bawah kendali string format yang menentukan bagaimana argumen selanjutnya dikonversi untuk output.
Saya akan menggunakan kesempatan ini untuk meminta Anda membaca dokumentasi.
sumber
fungsi printf () digunakan untuk mencetak string dan variabel ke layar sementara fungsi put () hanya memungkinkan Anda untuk mencetak string hanya ke layar Anda.
sumber
puts
adalah pilihan sederhana dan menambahkan baris baru pada akhirnya danprintf
menulis output dari string yang diformat.Lihat dokumentasi untuk
puts
dan untukprintf
.Saya akan merekomendasikan untuk menggunakan hanya
printf
karena ini lebih konsisten daripada metode switching, yaitu jika Anda debbugging itu kurang menyakitkan untuk mencari semua printfs daripadaputs
danprintf
. Sering kali Anda ingin menampilkan variabel dalam cetakan Anda juga, jadiputs
sebagian besar digunakan dalam kode contoh.sumber
Saat membandingkan
puts()
danprintf()
, meskipun konsumsi memori mereka hampir sama,puts()
membutuhkan waktu lebih lama dibandingkanprintf()
.sumber