Yanıtlar:
*
Genişlik tanımlayıcısını / duyarlığını printf()
biçim dizesine sabit kodlamak yerine, geçmek için bir yıldız işareti ( ) kullanabilirsiniz , ör.
void f(const char *str, int str_len)
{
printf("%.*s\n", str_len, str);
}
str_len
Argümanın türüne int
(veya yükseltilecek daha dar integral tipine) sahip olması gerektiği unutulmamalıdır int
. Geçmesine bir hata olacağını long
, size_t
vb
%s
, orijinal dizenin bir alt dizesini yazdırmak olduğunu belirtmek gerekir. Bu kullanım durumunda, str
orijinal dizenin içinde bir yere işaret eder (muhtemelen başında) ve str_len
yazdırılması gereken alt dizenin uzunluğunu belirtir.
Daha ayrıntılı burada .
tamsayı değeri veya
*
minimum alan genişliğini belirten. Sonuç, gerekirse boşluk karakterleriyle doldurulur (varsayılan olarak), sağa yaslandığında solda veya sola yaslanmışsa sağda. * Kullanılması durumunda, genişlik int türünde ek bir bağımsız değişken tarafından belirtilir. Bağımsız değişkenin değeri negatifse, belirtilen - bayrağı ve pozitif alan genişliği ile sonuçlanır. (Not: Bu, minimum genişliktir: Değer hiçbir zaman kesilmez.)
.
ve ardından tamsayı veya * veya bu, dönüşümün doğruluğunu belirtmez. * Kullanılması durumunda, kesinlik int türünde ek bir bağımsız değişken tarafından belirtilir. Bu argümanın değeri negatifse, dikkate alınmaz. Ne bir sayı ne de * kullanılmazsa, hassasiyet sıfır olarak alınır. Kesinliğin kesin etkileri için aşağıdaki tabloya bakın.
Dolayısıyla, her iki dönüşüm özelliğini de denersek
#include <stdio.h>
int main() {
int precision = 8;
int biggerPrecision = 16;
const char *greetings = "Hello world";
printf("|%.8s|\n", greetings);
printf("|%.*s|\n", precision , greetings);
printf("|%16s|\n", greetings);
printf("|%*s|\n", biggerPrecision , greetings);
return 0;
}
çıktıyı alıyoruz:
|Hello wo|
|Hello wo|
| Hello world|
| Hello world|
Ben yukarıdaki kod doğrudur düşünmüyorum ama (bu açıklamasına göre printf()
) .*
araçlar
Genişlik, biçim dizesinde belirtilmez, ancak biçimlendirilmesi gereken bağımsız değişkenden önce gelen ek bir tamsayı değer bağımsız değişkeni olarak belirtilir. '
Bu nedenle, argüman olarak kabul edilebilir genişliğe sahip bir dizedir.
int
(veya onun bir alt kümesi) olduğunu vurgulamalıdır - sadece daha sezgisel size_t
veya olası takma adları gibi herhangi bir integral değer değil std::string::size_type
. Başvurulan sayfanın size_t
desteklenen tür belirticilerinden biri olarak bahsedildiği göz önüne alındığında, bu daha da kafa karıştırıcıdır .
Bakınız: http://www.cplusplus.com/reference/clibrary/cstdio/printf/
.*
Kesinlik, biçim dizesinde değil, biçimlendirilmesi gereken bağımsız değişkenden önce gelen ek bir tamsayı değeri bağımsız değişkeni olarak belirtilir.
s
Karakter dizisi
printf
çağrı değildir .