如何获得sprintf
Objective-C 中的功能?该函数当然是stdio
C 语言的一部分,所以我当然可以调用它,但由于我使用的是 Foundation,所以我也需要它与NSString
s 一起使用。
编辑
我为我的口齿不清而道歉,但我实际上希望有更多类似于返回字符串的PHPsprintf
函数。(在 Josh Caswell 对我的问题进行非常有效的编辑之前,这可能有点明显。)这就像NSLog
但不是写入控制台,而是给出一个字符串(或指针)作为返回值。
如何获得sprintf
Objective-C 中的功能?该函数当然是stdio
C 语言的一部分,所以我当然可以调用它,但由于我使用的是 Foundation,所以我也需要它与NSString
s 一起使用。
我为我的口齿不清而道歉,但我实际上希望有更多类似于返回字符串的PHPsprintf
函数。(在 Josh Caswell 对我的问题进行非常有效的编辑之前,这可能有点明显。)这就像NSLog
但不是写入控制台,而是给出一个字符串(或指针)作为返回值。
在 Cocoa 中做同样事情的最接近的函数是NSString
's 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 对象。
一种选择:
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)
确保您仍然可以进行格式字符串检查。
NSString * myString = [NSString stringWithFormat:@"...", params…];
const char * myStrPtr = [myString UTF8String];