如何在Objective-C中获得sprintf
的功能?该函数当然是C语言中stdio
的一部分,所以我当然可以调用它,但由于我使用的是Foundation,我需要它同时使用NSString
。
我为自己的不正常而道歉,但我实际上希望有更像PHP sprintf
function的东西,它会返回一个字符串。 (在Josh Caswell非常有效地编辑我的问题之前,这可能有点明显。)它就像NSLog
但是不是写入控制台而是将字符串(或指针)作为返回值。
答案 0 :(得分:6)
在Cocoa中执行相同操作的最接近的函数是NSString
的{{1}}。
使用stringWithFormat
:
sprintf
使用char buf[100];
sprintf(buf, "Line %d of %d", currentLine, totalLines);
stringWithFormat:
请注意NSString res = [NSString stringWithFormat:@"Line %d of %d", currentLine, totalLines];
支持使用stringWithFormat:
格式说明符打印Cocoa对象。
答案 1 :(得分:2)
一个选项:
NSString *OCSprintf(NSString *format, ...) NS_FORMAT_FUNCTION(1,2);
NSString *OCSprintf(NSString *format, ...)
{
va_list args;
va_start(args, format);
NSString *result = [[[NSString alloc] initWithFormat:format arguments:args] autorelease];
va_end(args);
return result;
}
这只是根据您的要求将stringWithFormat:
(更确切地说,其中一个表兄弟)包装成一个函数。 NS_FORMAT_FUNCTION(1,2)
确保您仍然可以进行格式字符串检查。
答案 2 :(得分:0)
NSString * myString = [NSString stringWithFormat:@"...", params…];
const char * myStrPtr = [myString UTF8String];