Saya mendapat cuplikan kode yang berisi file
printf("%.*s\n")
apa %.*s
maksudnya
c
printf
format-specifiers
Shaobo Wang
sumber
sumber
printf
panggilan yang valid .Jawaban:
Anda dapat menggunakan tanda bintang (
*
) untuk meneruskan penentu lebar / presisiprintf()
, daripada mengkodekannya secara langsung ke dalam format string, yaitusumber
str_len
argumen harus memiliki tipeint
(atau tipe integral yang lebih sempit, yang akan dipromosikan menjadiint
). Ini akan menjadi bug untuk luluslong
,size_t
, dll%s
, adalah untuk mencetak sub-string dari string asli. Dalam kasus penggunaan ini,str
akan menunjuk ke suatu tempat di dalam string asli (mungkin di awal), danstr_len
akan menentukan panjang sub-string yang harus dicetak.Lebih detail di sini .
Jadi jika kita mencoba kedua spesifikasi konversi tersebut
kami mendapatkan hasilnya:
sumber
Menurut saya kode di atas tidak benar tetapi (menurut uraian ini
printf()
).*
artinyaJadi ini adalah string dengan lebar yang bisa dilewati sebagai argumen.
sumber
int
(size_t
atau bagiannya ) - bukan sembarang nilai integral seperti yang lebih intuitif atau kemungkinan aliasnya, sepertistd::string::size_type
. Ini bahkan lebih membingungkan, dengan mempertimbangkan bahwa halaman yang direferensikan menyebutkansize_t
sebagai salah satu penentu jenis yang didukung.Lihat: http://www.cplusplus.com/reference/clibrary/cstdio/printf/
sumber