What does the %*s format specifier mean?

懵懂的女人 提交于 2019-12-17 17:29:43

问题


In some code that I have to maintain, I have seen a format specifier %*s . Can anybody tell me what this is and why it is used?

An example of its usage is like:

fprintf(outFile, "\n%*s", indent, "");

回答1:


It's used to specify, in a dynamic way, what the width of the field is:

  • The width is not specified in the format string, but as an additional integer value argument preceding the argument that has to be formatted.

so "indent" specifies how much space to allocate for the string that follows it in the parameter list.

So,

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

is the same as

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

It's a nice way to put some spaces in your file, avoiding a loop.




回答2:


Don't use "%*s" on a buffer which is not NULL terminated (packed) thinking that it will print only "length" field.




回答3:


* Causes fprintf to pad the output until it is n characters wide, where n is an integer value stored in the a function argument just preceding that represented by the modified type.

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



回答4:


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

The width is not specified in the format string, but as an additional integer value argument preceding the argument that has to be formatted.

e.g: printf("%*s", 4, myValue); is equivelant to printf("%4s", myValue);.




回答5:


The format specifier %4s outputs a String in a field width of 4—that is, printf displays the value with at least 4 character positions.

If the value to be output is less than 4 character positions wide, the value is right justified in the field by default.

If the value is greater than 4 character positions wide, the field width expands to accommodate the appropriate number of characters.

To left justify the value, use a negative integer to specify the field width.

References: Java™ How To Program (Early Objects), Tenth Edition



来源:https://stackoverflow.com/questions/1000556/what-does-the-s-format-specifier-mean

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!