Mam strukturę do reprezentowania ciągów w pamięci wyglądające tak:Korzystanie size_t do określania precyzji sznurku w printf C za
typedef struct {
size_t l;
char *s;
} str_t;
wierzę używając size_t sens dla określenia długości łańcucha char . Chciałbym również wydrukować ten ciąg za pomocą printf("%.*s\n", str.l, str.s)
. Jednak precyzja *
oczekuje argumentu w postaci int
, a nie size_t
. Nie udało mi się znaleźć niczego istotnego na ten temat. Czy jest jakiś sposób prawidłowego użycia tej struktury, bez rzutowania na int
w wywołaniu ?
czy nie planujesz na końcu wartości "char *"? Jeśli jest on zakończony null, nie widzę, jakie ustawienie dokładności na pierwszy rzut oka byłby w pierwszej kolejności. Poza tym, myślę, że twoje wybory to: rzuć lub zmień 'size_t' na' int' i po prostu nigdy nie pozwól, aby było negatywne. –
@EvanTeran Struny faktycznie wskazują fragmenty większego bufora, więc znak 'null' jest gdzieś dalej. Rozmiar 'int' nie jest problemem, ponieważ łańcuchy mają zwykle co najwyżej kilkaset bajtów. Frustruje mnie to, że chociaż 'size_t' dobrze pasuje do tego celu, C99 nie definiuje specjalnego modyfikatora precyzji, który akceptuje argument" size_t ". –