böyle bakıyor bellekte dizeleri temsil etmek bir yapıya sahiptir:C'nin printf bir dize kesinliğini belirtmek için size_t kullanma
typedef struct {
size_t l;
char *s;
} str_t;
Ben size_t kullanarak inanıyorum
bir karakter dizesinin uzunluğu belirtmek için mantıklı . Ayrıca bu dize printf("%.*s\n", str.l, str.s)
kullanarak yazdırmak istiyorum. Ancak, *
kesinlik, size_t
değil, int
bağımsız değişkeni bekler. Bununla ilgili hiçbir şey bulamadım. Bu yapıyı numaralı aramaya int
no'lu döküm olmadan doğru şekilde kullanmak için bir yer var mı?
'char * 'öğesini sonlandırmayı planlamıyor musunuz? Eğer null feshedilirse, uzunluğun doğruluğunu ayarlamanın sizi ilk etapta ne getireceğini anlamıyorum. Bunun ötesinde, seçimlerinizin bence olduğunu düşünüyorum: "size_t" ifadenizi bir "int" 'e dönüştürün veya değiştirmeyin ve hiçbir zaman negatif olmasına izin vermeyin. –
@EvanTeran Dizeler aslında daha büyük bir arabellek içindeki parçalara işaret eder, bu yüzden "null" karakteri bir yerlerde daha ileridedir. Dizge genel olarak en fazla birkaç yüz bayt olduğu için, bir "int" nin boyutu bir sorun değildir. Beni rahatsız eden şey, 'size_t' bu amaca çok iyi uysa bile, C99 'size_t' argümanını kabul eden özel bir hassasiyet değiştirici tanımlamaz. Fwrite öneri için –