Diyelim ki null
sonlandırılmamış bir dizge var ve onun tam boyutunu biliyorsunuz, öyleyse bu dizgiyi printf
C ile nasıl yazdırabilirsiniz ? Böyle bir yöntemi hatırlıyorum ama şimdi bulamıyorum ...
Diyelim ki null
sonlandırılmamış bir dizge var ve onun tam boyutunu biliyorsunuz, öyleyse bu dizgiyi printf
C ile nasıl yazdırabilirsiniz ? Böyle bir yöntemi hatırlıyorum ama şimdi bulamıyorum ...
Yanıtlar:
Printf ile bir olasılık var, şöyle:
printf("%.*s", stringLength, pointerToString);
Hiçbir şeyi kopyalamaya gerek yok, orijinal dizeyi veya tamponu değiştirmeye gerek yok.
printf
~ On yıldan sonra bile temel şeyler hakkında bir şeyler öğrendiğimde bunu seviyorum ... :)
printf
11 karaktere kadar veya NULL ile karşılaşana kadar, hangisi önce gelirse yazdıracaktır ; örneğinizde NULL önce gelir. Bir maksimum uzunluğun belirtilmesi, NULL'un "dizge sonu" anlamını kaybetmesine neden olmaz printf
.
İşte nasıl %.*s
çalıştığı ve nerede belirtildiği ile ilgili bir açıklama .
Bir printf şablon dizesindeki dönüştürme belirtimleri genel biçime sahiptir:
% [ param-no $] flags width [ . precision ] type conversion
veya
% [ param-no $] flags width . * [ param-no $] type conversion
İkinci biçim, argüman listesinden kesinliği elde etmek içindir:
Ayrıca '*' hassasiyetini de belirtebilirsiniz. Bu, bağımsız değişken listesindeki bir sonraki bağımsız değişkenin (yazdırılacak gerçek değerden önce) kesinlik olarak kullanıldığı anlamına gelir. Değer bir int olmalıdır ve negatifse yok sayılır.
- glibc kılavuzunda çıktı dönüştürme sözdizimi
İçin %s
dize biçimlendirme, hassas özel bir anlamı vardır:
Yazılacak maksimum karakter sayısını belirtmek için bir kesinlik belirtilebilir; aksi takdirde, sonlandırıcı boş karaktere kadar olan ancak içermeyen dizedeki karakterler çıktı akışına yazılır.
- glibc kılavuzundaki diğer çıktı dönüşümleri
Diğer kullanışlı varyantlar:
"%*.*s", maxlen, maxlen, val
önce boşluklar ekleyerek sağa yaslanır;"%-*.*s", maxlen, maxlen, val
sola yaslanacak."%-*.*s", padding, str_view.size(), str_view.data()
Stdout için bir fwrite () kullanabilirsiniz!
fwrite(your_string, sizeof(char), number_of_chars, stdout);
Bu şekilde ilk karakterleri (number_of_chars değişkeninde tanımlanan sayı) bir dosyaya, bu durumda stdout'a (standart çıktı, ekranınız) çıkaracaksınız!
printf("%.*s", length, string)
çalışmayacak.
Bu, hangisi önce gelirse, UP TO uzunluk bayt YA DA boş bayt yazdırmak anlamına gelir. Boş sonlandırılmamış karakter dizisi, uzunluktan ÖNCE boş baytlar içeriyorsa, printf bu baytlarda duracak ve devam etmeyecektir.
#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;
}
Kodu düzenledim, işte başka bir yol:
#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
bağlamda, bütün dizeleri boş sonlandırılmış bulunmaktadır. İçlerinde boş değer bulunmayan karakter dizileri dizge değildir ... bunlar karakter dizileridir :)