c - Co oznacza specyfikator formatu% * s?

Translate

W jakimś kodzie, który muszę utrzymywać, widziałem specyfikator formatu%*s. Czy ktoś może mi powiedzieć, co to jest i dlaczego jest używane?

Przykład jego użycia to:

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

Wszystkie odpowiedzi

Translate

Służy do określenia w sposób dynamiczny szerokości pola:

  • Szerokość nie jest określona w ciągu formatu, ale jako dodatkowy argument wartości całkowitej poprzedzający argument, który ma zostać sformatowany.

więc „indent” określa, ile miejsca należy przydzielić dla ciągu następującego po nim na liście parametrów.

Więc,

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

jest taki sam jak

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

To dobry sposób na umieszczenie spacji w pliku, unikając pętli.

Źródło
Translate

Nie używaj "% * s" na buforze, który nie jest zakończony wartością NULL (spakowany), myśląc, że wypisze tylko pole "length".

Źródło
Translate

Specyfikator formatu% 4s generuje łańcuch o szerokości pola 4 - to znaczy printf wyświetla wartość z co najmniej 4 pozycjami znaków.

Jeśli wartością do wyprowadzenia jestlessszerokości niż 4 znaki, wartość toright justifiedw polu domyślnie.

Jeśli wartość togreaterszerokość niż 4 znaki, szerokość polaexpandsaby pomieścić odpowiednią liczbę znaków.

Aby wyrównać wartość do lewej, użyj ujemnej liczby całkowitej do określenia szerokości pola.

Bibliografia:Java ™ How To Program (wczesne obiekty), wydanie dziesiąte

Źródło
Translate

* Powoduje, że fprintf wypełnia dane wyjściowe, aż będzie miało szerokość n znaków, gdzie n jest wartością całkowitą przechowywaną w argumencie funkcji a tuż przed argumentem reprezentowanym przez zmodyfikowany typ.

printf("%*d", 5, 10) //will result in "10" being printed with a width of 5.
Źródło
Translate

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

Szerokość nie jest określona w ciągu formatu, ale jako dodatkowy argument wartości całkowitej poprzedzający argument, który ma zostać sformatowany.

na przykład:printf("%*s", 4, myValue);jest równoważneprintf("%4s", myValue);.

Źródło
Leave a Reply
You must be logged in to post a answer.
O autorze