I got a code snippet in which there is a

printf("%.*s\n") 

what does the %.*s mean?

1

4 Answers

You can use an asterisk (*) to pass the width specifier/precision to printf(), rather than hard coding it into the format string, i.e.

void f(const char *str, int str_len) { printf("%.*s\n", str_len, str); } 
3

More detailed here.

integer value or * that specifies minimum field width. The result is padded with space characters (by default), if required, on the left when right-justified, or on the right if left-justified. In the case when * is used, the width is specified by an additional argument of type int. If the value of the argument is negative, it results with the - flag specified and positive field width. (Note: This is the minimum width: The value is never truncated.)

. followed by integer number or *, or neither that specifies precision of the conversion. In the case when * is used, the precision is specified by an additional argument of type int. If the value of this argument is negative, it is ignored. If neither a number nor * is used, the precision is taken as zero. See the table below for exact effects of precision.

So if we try both conversion specification

#include <stdio.h> int main() { int precision = 8; int biggerPrecision = 16; const char *greetings = "Hello world"; printf("|%.8s|\n", greetings); printf("|%.*s|\n", precision , greetings); printf("|%16s|\n", greetings); printf("|%*s|\n", biggerPrecision , greetings); return 0; } 

we get the output:

|Hello wo| |Hello wo| | Hello world| | Hello world| 
2

I don't think the code above is correct but (according to this description of printf()) the .* means

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 it's a string with a passable width as an argument.

2

See:

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

s String of characters

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy