Çalışma zamanında dizenin uzunluğunu bildiğimi farz edersek, printf kullanarak boş olmayan sonlandırılmış bir dizeyi nasıl yazdırabilirim? Birlikte diğer args ileBoş olmayan sonlandırılmış bir dizeyi printf kullanarak nasıl yazdırabilirim?
cevap
printf("%.*s", length, string);
Kullanım: C
printf("integer=%d, string=%.*s, number=%f", integer, length, string, number);
// ^^^^ ^^^^^^^^^^^^^^
Eğer %.123s
formatı ile çıkışa maksimum uzunluğu belirtebilirsiniz. Bu, çıkış uzunluğunun en fazla 123 karakter olduğu anlamına gelir. 123
, *
ile değiştirilebilir, böylece uzunluk, hard-kodlanmış yerine printf argümanından alınacaktır.
Not Bu varsayar string
her iç boş bayt içermez (\ 0), %.123s
sadece fazla uzunluğunu da tam uzunluğu kısıtlar, ve şeritler hala kabul edilir boş sonlandırılmış.
Boş olmayan null sonlandırılmış bir dize yazdırmak isterseniz, tek bir printf kullanamazsınız. Bunun yerine fwrite
kullanın:
fwrite(string, 1, length, stdout);
ayrıntılı bir açıklama için @M.S.Dousti's answer bakınız.
Hızlı yanıt için teşekkürler ! – Mike
not: 'length', varsayılan argüman tanıtımlarından sonra 'int' türüne sahip olmalıdır. "Length" değişkeniniz daha büyükse (ör. "Size_t"), onu (int) 'a çevirmelisiniz, aksi takdirde kodunuz" size_t "nin int' 'den daha geniş olduğu bir platformda kırılacaktır. –
@KennyTM tarafından sağlanan cevap harika, ancak bir incelikle. beklendiği gibi Genelde
, dize "sonlandırıldı" boş olmayan, ancak ortada bir null karakteri varsa, printf("%.*s", length, string);
çalışmaz. %.*s
biçim dizesi maksimumlength
ait karakterleri, değil tamlength
karakterleri yazdırmak için printf
ister olmasıdır.
:
#include <stdio.h>
int main(void) {
size_t length = 5;
char string[length];
string[0] = 'A';
string[1] = 'B';
string[2] = 0; // null character in the middle
string[3] = 'C';
string[4] = 'D';
printf("With printf: %.*s\n", length, string);
printf("With fwrite: ");
fwrite(string, sizeof(char), length, stdout);
printf("\n");
return 0;
}
Çıktı:
İştefwrite(string, sizeof(char), length, stdout);
bir örnek kod var
With printf: AB
With fwrite: AB CD
'sizeof (char)' tanıma göre 1'dir. Ayrıca, 'NULL', özellikle boş bir * işaretçi * sabiti. –
@KeithThompson, 'sizeof (char)' daha semantiktir. Ayrıca, '' 0 '' 0'dan daha anlamlıdır. Ama kim umursar ;-) –
- 1. İngilizce olmayan karakterleri terminale nasıl yazdırabilirim?
- 2. C++, boost asio, boş sonlandırılmış dize alma
- 3. Sınırlayıcı olmayan bir dizeyi C# kullanarak bir DateTime'a nasıl ayrıştırabilirim?
- 4. Diğeri basmaya devam ederken bir dizeyi nasıl yazdırabilirim?
- 5. Kotlin'de boş olmayan, boş olmayan dizeler için nasıl test edilir?
- 6. Görünümde kenar boşlukları olmayan bir dizeyi nasıl çizebilirim?
- 7. Grep kullanarak tam bir dizeyi nasıl arayabilirim?
- 8. Dizeyi bir diziyi kullanarak başka bir dizeyle nasıl değiştirebilirim?
- 9. Swift kullanarak veri türünde bir değişkenin içeriğini nasıl yazdırabilirim?
- 10. Knitr kullanırken konsola nasıl yazdırabilirim?
- 11. Python'daki bir dizeyi, yeni satır karakterlerini gerçek yeni satırlara dönüştürerek nasıl yazdırabilirim?
- 12. Boş olmayan dizinleri göster
- 13. LINQ Boş olmayan dizeleri
- 14. Sonlandırılmış işlemin pidini belirleme
- 15. Bir şeyi nasıl yazdırabilirim (geçici olarak)?
- 16. Başka bir printf olmadığı sürece Printf çalışmaz
- 17. printf() nasıl bildirilir?
- 18. Printf kullanarak özel bir türün çıktısını nasıl özelleştiririm?
- 19. Dizi dize ile boş dizeyi boş değerlerle değiştirme php
- 20. printf
- 21. python: boş olmayan yönergeleri sil
- 22. Bir dizeyi bir regex kullanarak parantez içinde nasıl değiştirebilirim?
- 23. Bir tıklatılmış dizeyi OnItemClick kullanarak bir liste görünümünden nasıl alırım?
- 24. Bir dizeyi Io'deki bir listeye nasıl dönüştürebilirim?
- 25. R - Ardışık boş olmayan sıralar
- 26. Nesneleri kullanarak bir nesnedeki alt dizeyi arayın
- 27. Bir dizeyi
- 28. Bir sembolün tanımını Şemada değerlendirmeden nasıl yazdırabilirim?
- 29. C++ Bir .txt dosyasını nasıl yazdırabilirim?
- 30. Son boş olmayan hücreyi bir satırda alma
Neden fwrite kullanmıyorsunuz? –
Boş bırakılmadıysa, tanım gereği bir dize değil. –
sadece bir _c string_ değil, diğer dillerde geçerli bir dize olacağından .. ve "null olmayan sonlandırılmış bir char dizisi" daha doğru olsa da, evrensel olarak anlaşıldığından eminim. – Willdorf