2

Was reading the response by Shaggy Frog to this post and was intrigued by the following line of code:

NSLog(@"%@", [NSString stringWithFormat:@"%@:%*s%5.2f", key, padding, " ", [object floatValue]]);

I know string formatting is an age old art but I'm kinda doing the end around into Cocoa/Obj-C programming and skipped a few grades along the way. Where is a good (best) place to learn all the string formatting tricks allowed in NSString's stringWithFormat? I'm familiar with Apple's String Format Specifiers page but from what I can tell it doesn't shed light on whatever is happening with %*s or the %5.2f (not to mention the 3 apparent placeholders followed by 4 arguments) above?!?

2
  • 1
    I can see why NSLog(@"%@", [NSString stringWithFormat: @"...", ...]); was used in that answer (to parallel the question), but NSLog(@"...", ...); should work identically and it reads more easily. Commented Apr 23, 2010 at 23:06
  • %*s is a printf feature from C99 Commented Jul 30, 2011 at 2:19

1 Answer 1

2

The documentation of -stringWithFormat leads you to String Format Specifier which in turn sends you to the IEEE printf specification. That's about as much information as you'll ever want.

The only notable exception:

%@

Objective-C object, printed as the string returned by descriptionWithLocale: if available, or description otherwise. Also works with CFTypeRef objects, returning the result of the CFCopyDescription function.

  • nil gets converted to (null), that's the reason why NSLog(@"%@", someObject) is safer than NSLog("someObject). The later might crash when someObject is nil:

You might also be interested in the wikipedia page about string formatting.

Sign up to request clarification or add additional context in comments.

2 Comments

ya. that i know.. what i don't know is a good source describing all the printf string argument manipulation tricks/techniques.
man printf is a good place to start (the Cocoa methods follow the same practices, which the additions listed above), although the wiki page linked above is basically just a fancy form of the printf man page. For example, %*s uses two specifies, * and s; both are described on the man page (* in the "width" section, and s in the type section).

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.