我照书上的方法,写了一个函数来处理可变参数,为什么老是出现错误呢?
-(void)sayHelloTo:(NSString *)first, ...{
    va_list names;
    if (first) {
        va_start(names, first);
        NSString* name = nil;
        while ((name = va_arg(names, id))) {
            NSLog(@"%@", name);
        }
        va_end(names);
    }
}
运行时,名字是都打印出来了,不过最后出现了异常,异常信息如下:Thread1:EXC_BAD_ACCESS(code=EXC_I386_GPFLT)
请问这是什么原因?本人是初学者,谢谢!!!!

解决方案 »

  1.   

    -(void)sayHelloTo:(NSString *)first{
        va_list names;
        if (first) {
            va_start(names, first);
            NSString* name = nil;
            while ((name = va_arg(names, id))) {
                NSLog(@"%@", name);
            }
            va_end(names);
        }
    }这样就可以了....没有那个,......的意思是还可以用更多的参数例如-(void)sayHelloTo:(NSString *)first second:(NSString *)sec 是这个意思........
      

  2.   

    -(void)sayHelloTo:(NSString *)first, ... NS_REQUIRES_NIL_TERMINATION {
    这样也可以
      

  3.   

    那是C的方法,尽量别用,建议用NSArray:-(void)sayHelloTo: (NSArray*)nameArray; 
      

  4.   

    1. first应该是打印不出来的吧
    2. 请在参数最后加nil,如[self sayHelloTo:@"abc", @"def", nil];如果没加nil就会出现楼主描述的错误。
      

  5.   

    可变参数,c里经常用,oc的话,面向对象了都,自己就没必要折腾可变参数了