Mam fragment kodu, w którym znajduje się plik
printf("%.*s\n")
co to %.*s
znaczy
c
printf
format-specifiers
Shaobo Wang
źródło
źródło
printf
połączenie.Odpowiedzi:
Możesz użyć gwiazdki (
*
), aby przekazać specyfikator szerokości / precyzję doprintf()
, zamiast zakodować go na stałe w ciągu formatu, tj.źródło
str_len
argument musi mieć typint
(lub węższy typ całkowity, do którego zostałby podwyższonyint
). Byłoby błędem, aby przejśćlong
,size_t
itp%s
, jest wydrukowanie podłańcucha oryginalnego ciągu. W tym przypadku,str
wskazywałoby gdzieś wewnątrz oryginalnego łańcucha (prawdopodobnie na początku) istr_len
określił długość podłańcucha, który powinien zostać wydrukowany.Więcej szczegółów tutaj .
Więc jeśli spróbujemy obu specyfikacji konwersji
otrzymujemy wynik:
źródło
Nie sądzę, aby powyższy kod był poprawny, ale (zgodnie z tym opisem
printf()
).*
oznaczaJest to więc łańcuch o dopuszczalnej szerokości jako argument.
źródło
int
(lub jej podzbiorem) - a nie zwykłą wartością całkowitą, jak bardziej intuicyjna,size_t
lub jej możliwymi aliasamistd::string::size_type
. Jest to jeszcze bardziej zagmatwane, biorąc pod uwagę, że strona, do której istnieje odwołanie, jest wymienionasize_t
jako jeden z obsługiwanych specyfikatorów typu.Zobacz: http://www.cplusplus.com/reference/clibrary/cstdio/printf/
źródło