views:

2314

answers:

2

How can I pad a string with spaces on the left when using printf?

For example, I want to print "Hello" with 40 spaces preceding it.

Also, the string I want to print consists of multiple lines. Do I need to print each line separately?

EDIT: Just to be clear, I want exactly 40 spaces printed before every line.

+6  A: 

If you want the word "Hello" to print in a column that's 40 characters wide, with spaces padding the left, use the following.

char *ptr = "Hello";
printf("%40s\n", ptr);

That will give you 35 spaces, then the word "Hello". This is how you format stuff when you know how wide you want the column, but the data changes (well, it's one way you can do it).

If you know you want exactly 40 spaces then some text, just save the 40 spaces in a constant and print them. If you need to print multiple lines, either use multiple printf statements like the one above, or do it in a loop, changing the value of ptr each time.

Bill the Lizard
dunno too much about format flags. but i suspect printf("%40s%s\n", "", ptr); can be used to pad it with 40 spaces too?
Johannes Schaub - litb
Yes, that would always give you 40 spaces before the contents of the pointer. That's a nice solution, but if you have to do it a lot I think a constant with 40 spaces would be faster. I don't know if the compiler is able to optimize printf formats.
Bill the Lizard
@Bill: the compiler cannot optimize printf() formats.
Jonathan Leffler
Also, if you have an int variable 'n' that contains the number of spaces to include, you can use: printf("%*s%s\n", n, "", ptr); to get a variable number of spaces.
Jonathan Leffler
And, to address the last part of the Q: yes, if you want each line of the data to be printed with 40 leading spaces, then you do need to segment the data so that each line is printed separately.
Jonathan Leffler
@Jonathan Leffler: Thanks! That's really helpful.
Bill the Lizard
@Jonathan Leffler: of course the compiler can optimise printf formats. For instance, GCC optimises printf("%s\n", foo) and replaces it with puts(foo).
Sam Hocevar
+1  A: 

If you want exactly 40 spaces before the string then you should just do: printf(" %s\n", myStr );

If that is too dirty, you can do (but it will be slower than manually typing the 40 spaces): printf("%40s%s", "", myStr );

If you want the string to be lined up at column 40 (that is, have up to 39 spaces proceeding it such that the right most character is in column 40) then do this: printf("%40s", myStr);

You can also put "up to" 40 spaces AfTER the string by doing: printf("%-40s", myStr);

SoapBox