c - Che cosa significa lo specificatore di formato% * s?

Translate

In alcuni codici che devo mantenere, ho visto un identificatore di formato%*s. Qualcuno può dirmi cos'è e perché viene utilizzato?

Un esempio del suo utilizzo è come:

fprintf(outFile, "\n%*s", indent, "");
This question and all comments follow the "Attribution Required."

Tutte le risposte

Translate

Serve per specificare, in modo dinamico, qual è la larghezza del campo:

  • La larghezza non è specificata nella stringa di formato, ma come argomento di un valore intero aggiuntivo che precede l'argomento che deve essere formattato.

quindi "indent" specifica quanto spazio allocare per la stringa che la segue nell'elenco dei parametri.

Così,

printf("%*s", 5, "");

equivale a

printf("%5s", "");

È un bel modo per inserire degli spazi nel file, evitando un ciclo.

fonte
Translate

Non usare "% * s" su un buffer che non è terminato con NULL (impacchettato) pensando che stamperà solo il campo "length".

fonte
Translate

L'identificatore di formato% 4s restituisce 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 èlesspiù di 4 posizioni di carattere, il valore èright justifiednel campo per impostazione predefinita.

Se il valore ègreaterpiù di 4 posizioni di caratteri larghe, la larghezza del campoexpandsper contenere il numero appropriato di caratteri.

Per giustificare il valore a sinistra, utilizzare un numero intero negativo per specificare la larghezza del campo.

Riferimenti:Java ™ How To Program (Early Objects), decima edizione

fonte
Translate

* Fa in modo che fprintf riempia l'output finché non è largo n caratteri, dove n è un valore intero memorizzato nell'argomento della funzione a appena precedente quello rappresentato dal tipo modificato.

printf("%*d", 5, 10) //will result in "10" being printed with a width of 5.
fonte
Translate

http://www.cplusplus.com/reference/clibrary/cstdio/printf/

La larghezza non è specificata nella stringa di formato, ma come argomento di un valore intero aggiuntivo che precede l'argomento che deve essere formattato.

per esempio:printf("%*s", 4, myValue);è equivalente aprintf("%4s", myValue);.

fonte
Leave a Reply
You must be logged in to post a answer.
Circa l'autore