Misalkan Anda memiliki string yang TIDAK null
diakhiri dan Anda tahu ukuran pastinya, jadi bagaimana Anda bisa mencetak string itu dengan printf
dalam C? Saya ingat metode seperti itu tetapi saya tidak dapat mengetahuinya sekarang ...
Misalkan Anda memiliki string yang TIDAK null
diakhiri dan Anda tahu ukuran pastinya, jadi bagaimana Anda bisa mencetak string itu dengan printf
dalam C? Saya ingat metode seperti itu tetapi saya tidak dapat mengetahuinya sekarang ...
Jawaban:
Ada kemungkinan dengan printf, seperti ini:
printf("%.*s", stringLength, pointerToString);
Tidak perlu menyalin apa pun, tidak perlu mengubah string atau buffer asli.
printf
bahkan setelah ~ dekade ... :)
printf
akan mencetak hingga 11 karakter atau sampai menemukan NULL, mana saja yang lebih dulu; dalam contoh Anda, NULL lebih dulu. Menentukan panjang maksimum tidak membuat NULL kehilangan arti "end-of-string" -nya printf
.
Berikut adalah penjelasan tentang cara %.*s
kerjanya, dan di mana ditentukan.
Spesifikasi konversi dalam string template printf memiliki bentuk umum:
% [ param-no $] flags width [ . precision ] type conversion
atau
% [ param-no $] flags width . * [ param-no $] type conversion
Bentuk kedua adalah untuk mendapatkan ketepatan dari daftar argumen:
Anda juga dapat menentukan presisi '*'. Ini berarti bahwa argumen berikutnya dalam daftar argumen (sebelum nilai aktual dicetak) digunakan sebagai presisi. Nilainya harus berupa int, dan diabaikan jika negatif.
- Output sintaks konversi di manual glibc
Untuk %s
pemformatan string, presisi memiliki arti khusus:
Presisi dapat ditentukan untuk menunjukkan jumlah karakter maksimum untuk ditulis; jika tidak, karakter dalam string hingga tetapi tidak termasuk karakter null yang mengakhiri ditulis ke aliran keluaran.
- Konversi keluaran lainnya di manual glibc
Varian bermanfaat lainnya:
"%*.*s", maxlen, maxlen, val
akan membenarkan, menyisipkan spasi sebelumnya;"%-*.*s", maxlen, maxlen, val
akan membenarkan kiri."%-*.*s", padding, str_view.size(), str_view.data()
Anda dapat menggunakan fwrite () untuk stdout!
fwrite(your_string, sizeof(char), number_of_chars, stdout);
Dengan cara ini Anda akan menampilkan karakter pertama (angka ditentukan dalam variabel number_of_chars) ke file, dalam hal ini ke stdout (output standar, layar Anda)!
printf("%.*s", length, string)
tidak akan berfungsi.
Ini berarti mencetak HINGGA byte panjang ATAU byte nol, mana saja yang lebih dulu. Jika array-of-char non-null-terminated Anda berisi byte null SEBELUM panjangnya, printf akan menghentikannya, dan tidak melanjutkan.
#include<string.h>
int main()
{
/*suppose a string str which is not null terminated and n is its length*/
int i;
for(i=0;i<n;i++)
{
printf("%c",str[i]);
}
return 0;
}
Saya mengedit kodenya, dengan cara lain:
#include<stdio.h>
int main()
{
printf ("%.5s","fahaduddin");/*if 5 is the number of bytes to be printed and fahaduddin is the string.*/
return 0;
}
C
konteks, semua string diakhiri null. Array char tanpa null di dalamnya bukanlah string ... mereka adalah array char :)