在变长参数函数中,没有直接的方法来知道参数的个数或者何时结束。但是可以使用一个特殊的结束标记来指示函数何时结束。
一个常用的结束标记是NULL
指针。当调用变长参数函数时,最后一个参数传递NULL
指针作为结束标记。在函数内部,可以通过检查参数是否为NULL
来判断何时结束。
以下是一个使用NULL
作为结束标记的示例代码:
#include
#include
void fcn(char *str, ...)
{
va_list args;
va_start(args, str);
while (str != NULL) {
printf("%s\n", str);
str = va_arg(args, char *);
}
va_end(args);
}
int main()
{
fcn("Hello", "World", "!", NULL);
return 0;
}
在上面的示例中,fcn
函数接受一个字符串参数str
和变长参数。它使用va_list
类型的args
变量来迭代访问变长参数。在循环中,它使用va_arg
宏来获取下一个字符串参数,并将其打印出来。当参数为NULL
时,循环结束。
在main
函数中,我们调用了fcn
函数,传递了三个字符串参数并以NULL
作为结束标记。输出结果将是:
Hello
World
!
注意:在变长参数函数中,必须确保至少有一个确定的参数传递给函数,否则会导致未定义的行为。在上面的示例中,我们传递了一个字符串参数str
作为起始参数。