void va_start(va_list ap, last_arg),修改了用va_list申明的指针,比如ap,使这个指针指向了不定长参数列表省略号前的位置(即:第一个不定的位置)。
type va_arg(va_list, type),获取参数列表的下一个参数,并以type的类型返回。这里有坑!!!
void va_end(va_list ap), 参数列表访问完以后,参数列表指针与其他指针一样,必须收回,否则出现野指针。
int vsnprintf(char *str, size_t size, const char *format, va_list ap);
用于向字符串中打印数据、数据格式用户自定义
#include <stdio.h>
#include <stdarg.h>
int my_snprintf(char* s, int size, const char* fmt, ...) //该自定义函数,与系统提供的snprintf()函数相同。
{
va_list ap;
int n = 0;
va_start(ap, fmt); //获得可变参数列表
n = vsnprintf(s, size, fmt, ap); //写入字符串s
va_end(ap); //释放资源
return n; //返回写入的字符个数
}
int main() {
char str[1024];
my_snprintf(str, sizeof(str), "%d,%d,%d,%d", 5, 6, 7, 8);
printf("%s\n", str);
return 0;
}