Che cosa significa lo specificatore di formato% * s?
-
05-07-2019 - |
Domanda
In alcuni codici che devo mantenere, ho visto un identificatore di formato % * s
. Qualcuno può dirmi di cosa si tratta e perché viene utilizzato?
Un esempio del suo utilizzo è come:
fprintf(outFile, "\n%*s", indent, "");
Soluzione
Viene utilizzato per specificare, in modo dinamico, la larghezza del campo :
- La larghezza non è specificata nella stringa di formato, ma come ulteriore argomento valore intero che precede il argomento che deve essere formattato.
così " trattino " specifica lo spazio da allocare per la stringa che lo segue nell'elenco dei parametri.
printf("%*s", 5, "");
è uguale a
printf("%5s", "");
È un bel modo per mettere degli spazi nel tuo file, evitando un ciclo.
Altri suggerimenti
Non utilizzare "% * s " su un buffer che non è terminato NULL (impacchettato) pensando che stamperà solo "lunghezza" campo.
http://www.cplusplus.com/reference/clibrary/cstdio/ printf /
La larghezza non è specificata nella stringa di formato, ma come argomento di valore intero aggiuntivo che precede l'argomento che deve essere formattato.
ad es. printf ("% * s " ;, 4, myValue);
è equivalente a printf ("% 4s " ;, myValue);
.
L'identificatore di formato% 4s genera una stringa in una larghezza di campo di 4, ovvero printf visualizza il valore con almeno 4 posizioni di carattere.
Se il valore da emettere è minore
di 4 posizioni di carattere, il valore è giustificato correttamente
nel campo per impostazione predefinita.
Se il valore è maggiore
di 4 posizioni di carattere in larghezza, la larghezza del campo si espande
per contenere il numero appropriato di caratteri.
A sinistra per giustificare il valore, utilizzare un numero intero negativo per specificare la larghezza del campo.
Riferimenti: Java ™ How To Program (Early Oggetti), decima edizione
* Fa sì che fprintf riempia l'output fino a quando non ha una larghezza di n caratteri, dove n è un valore intero memorizzato nell'argomento della funzione appena precedente a quello rappresentato dal tipo modificato.
printf("%*d", 5, 10) //will result in "10" being printed with a width of 5.