c - Co znamená specifikátor formátu * *?

Translate

V nějakém kódu, který musím udržovat, jsem viděl specifikátor formátu%*s. Může mi někdo říct, co to je a proč se používá?

Příklad jeho použití je jako:

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

Všechny odpovědi

Translate

Používá se k dynamickému určení, jaká je šířka pole:

  • Šířka není zadána v řetězci formátu, ale jako další argument celočíselné hodnoty předcházející argumentu, který má být formátován.

"indent" tedy určuje, kolik místa alokovat pro řetězec, který za ním následuje v seznamu parametrů.

Tak,

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

je stejné jako

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

Je to příjemný způsob, jak vložit do souboru nějaké mezery a vyhnout se smyčce.

Zdroj
Translate

Nepoužívejte "% * s" na vyrovnávací paměť, která není ukončena (zabalena) NULL, protože si myslí, že bude tisknout pouze pole "délka".

Zdroj
Translate

Specifikátor formátu% 4s odešle řetězec v šířce pole 4 - to znamená, že printf zobrazí hodnotu s alespoň 4 pozicemi znaků.

Pokud je výstupní hodnotalessnež 4 pozice znaků široké, hodnota jeright justifiedve výchozím nastavení v poli.

Pokud je hodnotagreaterširoký než 4 pozice znaků, šířka poleexpandspřizpůsobit odpovídající počet znaků.

Chcete-li hodnotu zarovnat doleva, použijte záporné celé číslo k určení šířky pole.

Reference:Java ™ How To Program (Early Objects), desáté vydání

Zdroj
Translate

* Způsobí, že fprintf vyplní výstup, dokud nebude široký n znaků, kde n je celočíselná hodnota uložená v argumentu funkce právě předcházejícím představovanému upraveným typem.

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

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

Šířka není zadána v řetězci formátu, ale jako další argument celočíselné hodnoty předcházející argumentu, který má být formátován.

např:printf("%*s", 4, myValue);odpovídáprintf("%4s", myValue);.

Zdroj
Leave a Reply
You must be logged in to post a answer.
O autorovi