Diyelim ki nullsonlandırılmamış bir dizge var ve onun tam boyutunu biliyorsunuz, öyleyse bu dizgiyi printfC ile nasıl yazdırabilirsiniz ? Böyle bir yöntemi hatırlıyorum ama şimdi bulamıyorum ...
Diyelim ki nullsonlandırılmamış bir dizge var ve onun tam boyutunu biliyorsunuz, öyleyse bu dizgiyi printfC 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 ... :)
printf11 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 conversionveya
% [ 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 %sdize 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;
}
Cbağlamda, bütün dizeleri boş sonlandırılmış bulunmaktadır. İçlerinde boş değer bulunmayan karakter dizileri dizge değildir ... bunlar karakter dizileridir :)