ho avuto un frammento di codice in cui v'è unCosa significa "%. * S" in printf?
printf("%.*s\n")
che cosa fa il %.*s
significa?
ho avuto un frammento di codice in cui v'è unCosa significa "%. * S" in printf?
printf("%.*s\n")
che cosa fa il %.*s
significa?
È possibile utilizzare un asterisco (*
) per passare alla larghezza specificatore/precisione per printf()
, invece di difficile codificazione nella stringa di formato, vale a dire
void f(const char *str, int str_len)
{
printf("%.*s\n", str_len, str);
}
Si noti che l'argomento 'str_len' deve avere il tipo' int' (o il tipo integrale più stretto, che sarà promosso a 'int'). Sarebbe un bug passare 'long',' size_t', ecc. –
Vale la pena ricordare che il probabile scopo di questo codice, specialmente se usato con '% s', è di stampare una sottostringa della stringa originale. In questo caso d'uso, 'str' punterebbe a qualche parte all'interno della stringa originale (possibilmente all'inizio), e' str_len' specificherà la lunghezza della sottostringa che dovrebbe essere stampata. –
Non credo che il codice di cui sopra è corretto ma (secondo questa descrizione printf()
) del .*
mezzi
la larghezza non è specificato nella stringa di formato, ma come parametro aggiuntivo valore intero che precede l'argomento che deve essere formattato '.
Quindi è una stringa con una larghezza passabile come argomento.
Ho aggiunto il riferimento incrociato all'URL in modo da poter evitare accuse di plagio. Certamente, la citazione corretta dice "La decisione non è ..." piuttosto che "La larghezza non è ...". –
Come sottolineato da @MattMcNabb, ogni riferimento a quella pagina deve evidenziare che "* un valore intero *" è esattamente "int' (o un suo sottoinsieme) - non solo qualsiasi valore integrale come" size_t "più intuitivo oi suoi possibili alias , come 'std :: string :: size_type'. Ciò è ancora più confuso, tenendo conto che la pagina di riferimento menziona 'size_t' come uno degli specificatori di tipi supportati. –
Vedi: http://www.cplusplus.com/reference/clibrary/cstdio/printf/
.*
La precisione non è specificato nella stringa di formato, ma come parametro aggiuntivo valore intero che precede l'argomento che deve essere formattata.
s
stringa di caratteri
Senza argomenti aggiuntivi, che non è un 'chiamata printf' valido. –