使用va_list并获取EXC_BAD_ACCESS

Jus*_*zic 2 iphone objective-c

类似于NSLog如何获取变量参数列表,我想创建自己的方法.

我有我的方法声明,但当我尝试访问'args'变量时,我得到一个EXEC_BAD_ACCESS.那是什么我在这里做得不对?

- (void)info:(NSString *)formatString, ...
{   
    va_list args;
    va_start(args, formatString);

    NSLog(@"formatString value: %@", formatString);

    // The following line causes the EXEC_BAD_ACCESS
    NSLog(@"args value: %@", args);

    // This is what I'm trying to do:
    NSLog(formatString, args);

    va_end(args);               
}
Run Code Online (Sandbox Code Playgroud)

我在这篇博客中关注了"Cocoa中的'va_list"部分:http: //cocoawithlove.com/2009/05/variable-argument-lists-in-cocoa.html

Ita*_*ber 6

您的代码中存在一些错误.首先,args不能直接打印.它是对几个参数的引用,并且尝试使用它来打印它将NSLog("%@")不起作用.您可以做的是用NSLogv()它来打印(例如NSLogv(format, args);).

或者你可以做我做的事情,并使用这个功能:

void print (NSString *format, ...) {
    va_list args;
    va_start(args, format);

    fputs([[[[NSString alloc] initWithFormat:format arguments:args] autorelease] UTF8String], stdout);

    va_end(args);
}
Run Code Online (Sandbox Code Playgroud)