Cara dasarnya adalah:
printf ("Here are the first 8 chars: %.8s\n", "A string that is more than 8 chars");
Cara lainnya, yang seringkali lebih berguna, adalah:
printf ("Here are the first %d chars: %.*s\n", 8, 8, "A string that is more than 8 chars");
Di sini, Anda menetapkan panjang sebagai argumen int untuk printf (), yang memperlakukan '*' dalam format sebagai permintaan untuk mendapatkan panjang dari sebuah argumen.
Anda juga dapat menggunakan notasi:
printf ("Here are the first 8 chars: %*.*s\n",
8, 8, "A string that is more than 8 chars");
Ini juga analog dengan notasi "% 8.8s", tetapi sekali lagi memungkinkan Anda untuk menentukan panjang minimum dan maksimum saat runtime - lebih realistis dalam skenario seperti:
printf("Data: %*.*s Other info: %d\n", minlen, maxlen, string, info);
Spesifikasi POSIX untuk printf()
mendefinisikan mekanisme ini.
-
) untuk membuatnya sesuai dengan panjang yang ditentukan.% 8s akan menentukan lebar minimum 8 karakter. Anda ingin memotong di 8, jadi gunakan% .8s.
Jika Anda ingin selalu mencetak tepat 8 karakter, Anda dapat menggunakan% 8.8s
sumber
Selain menentukan jumlah karakter yang tetap, Anda juga dapat menggunakan
*
yang berarti printf mengambil jumlah karakter dari argumen:Cetakan:
sumber
Menggunakan
printf
Anda bisa dilakukanJika Anda menggunakan C ++, Anda dapat memperoleh hasil yang sama menggunakan STL:
Atau, kurang efisien:
sumber
ostream_iterator<char>(cout)
! Sebagai gantinya, gunakanostreambuf_iterator<char>(cout)
! Perbedaan kinerja harus agak besar.std::cout.write(s.data(), 8)
. Atau dalam C ++ modernstd::cout << std::string_view{s.data(), 8}
,.Cetak empat karakter pertama:
printf("%.4s\n", "A string that is more than 8 chars");
Lihat tautan ini untuk informasi lebih lanjut (periksa .precision -section)
sumber
Di C ++ itu mudah.
EDIT: Ini juga lebih aman untuk menggunakan ini dengan iterator string, jadi Anda tidak kehabisan akhir. Saya tidak yakin apa yang terjadi dengan printf dan string yang terlalu pendek, tapi saya rasa ini mungkin lebih aman.
sumber
std::cout << someStr.substr(0,8);
jauh lebih jelas.printf (..... "%. 8s")
sumber
Di C ++, saya melakukannya dengan cara ini:
Harap dicatat ini tidak aman karena ketika melewati argumen kedua saya bisa melampaui ukuran string dan menghasilkan pelanggaran akses memori. Anda harus menerapkan pemeriksaan Anda sendiri untuk menghindari hal ini.
sumber