假設我有簽名的方法:什麼是正確的方式來包裝[NSString stringWithFormat:]?
+ (NSString *) myFormattedString:(NSString *)format, ...;
而且我希望它前面加上我的選擇(例如@「富」)的字符串。我想最好的方法是使用[myString initWithFormat:arguments:],但是你將如何實現這個方法?
我試着做以下,但我得到的警告,在註釋規定:
+ (NSString *) myFormattedString:(NSString *)format, ... {
char *buffer;
[format getCString:buffer maxLength:[format length] encoding:NSASCIIStringEncoding];
va_list args;
va_start(args, buffer); // WARNING: second parameter of 'va_start' not last named argument
NSString *str = [[NSString alloc] initWithFormat:format arguments:args];
[str autorelease];
return [NSString stringWithFormat:@"Foo: %@.", str];
}
我假設的va_start(原因)可以在一個(字符*)是因爲我在
manual page of STDARG(3)上看到的例子。如果我完全錯了,隨意徹底重寫該方法。
Woops,我誤解了va_start()的工作原理。我想http://numbergrinder.com/node/35沒有足夠清楚地解釋它。我認爲va_start()的第二個參數是有多少個參數發送給函數的實際計數;並且它有一個'重載',它接受了一個格式字符串,該格式字符串根據格式字符串中有多少未轉義的%確定了計數。哇,這使得它更容易,您不必確定你自己數。感謝您的解釋。 – Senseful 2009-07-30 22:04:23