使用char和可变数量的参数调用函数

时间:2014-07-08 18:46:20

标签: ios objective-c

所以我想要做的就是每当我触摸一个按钮时,它会调用一个带有char和一些可变数量参数的函数(在这种情况下,两个int值都是24)。

- (IBAction)buttonPressed:(id)sender {
number = 24;

printf_to_debug("some text %d %d ",number, number);
//printf(" %d %d ",number, number);
}

但是,当我调用该函数时,似乎总是将我的注意改为一些大数字,我不明白。

void printf_to_debug (char* fmt, ...) {

va_list args;
va_start( args, fmt );

printf(fmt, args);

charString = [NSString stringWithUTF8String: fmt];
charString = [NSString stringWithFormat:charString, args];
debugTextString = [NSString stringWithFormat:@"%@\r%@",charString, debugTextString];

va_end( args );


}

是否有人发现我的代码存在问题?

2 个答案:

答案 0 :(得分:2)

您必须使用vprintf()打印va_list

给出的参数
va_list args;
va_start (args, fmt );
vprintf(fmt, args);
va_end( args );

相应的NSString方法为initWithFormat:arguments:

NSString *s = [[NSString alloc] initWithFormat:@(fmt) arguments:args];

答案 1 :(得分:0)

让我们来看看你的代码实际上做了什么。

第一个重要的一行是:printf_to_debug("some text %d %d ",number, number);

哪个看起来很好,但无论如何它都被视为int并不重要。

接下来,你初始化变量参数列表,这很好但是你尝试打印使用: printf(fmt, args);

现在,当您使用该代码时,您似乎希望printf将变量参数列表中的每个单独对象视为一个单独的参数,但是,printf并不关心。它只看到你传递了一个参数。它并不知道或不关心参数是什么,它所知道和关心的是你告诉它将它作为十进制数给出的第一个参数(' s'% d"说)。现在,它需要va_list并将其视为一个数字并打印出来。由于你只提供了一个参数,你获得的第二个数字是完全垃圾,我怀疑XCode试图警告你(命令行clang确实如此)。

现在为简单的解决方案:

当您尝试将变量参数列表打印为单独的对象时,请使用vprintf函数。因此,在您的情况下,它将是vprintf(fmt, args);