天天看点

c语言不定长参数处理,3.7 C语言不定长参数

```c

#include

#include

#include

#include

char *my(char *format, ...)

{

va_list list;

//1. 先获取格式化后字符串的长度

va_start(list, format);

int size = vsnprintf(NULL, 0, format, list);

va_end(list);

if(size <= 0) {

return NULL;

}

size++;

//2. 复位va_list,将格式化字符串写入到buf

va_start(list, format);

char *buf = (char *)malloc(size);

vsnprintf(buf, size, format, list);

va_end(list);

return buf;

}

int Hpush(char *p){

int len = strlen(p);

int i = 0;

char c ;

for(i = 0;i< len;i++){

printf("%c",*(p+i));

}

}

void Hpushf(char *format, ...)

{

va_list list;

//1. 先获取格式化后字符串的长度

va_start(list, format);

int size = vsnprintf(NULL, 0, format, list);

va_end(list);

if(size <= 0) {

return ;

}

size++;

//2. 复位va_list,将格式化字符串写入到buf

va_start(list, format);

char *buf = (char *)malloc(size);

vsnprintf(buf, size, format, list);

va_end(list);

Hpush(buf);

}

char *p="yhp,hello";

int main(){

//Hpush(p);

Hpushf("%s\n",p);

return 0;

}

```

```c

#include

#include

double average(int num,...)

{

va_list valist;

double sum = 0.0;

int i;

va_start(valist, num);

for (i = 0; i < num; i++)

{

sum += va_arg(valist, int);

}

va_end(valist);

return sum/num;

}

int main()

{

printf("Average of 2, 3, 4, 5 = %f\n", average(4, 2,3,4,5));

printf("Average of 5, 10, 15 = %f\n", average(3, 5,10,15));

}

```