我的感觉是变参函数就是一个套子,有固定的格式,你把具体内容往这个套子里一套就ok了。关键注意是变参
在标准文件stdarg.h中包含带参数的宏定义
第一个和最后一个固定参数,该参数列表中至少要有一个固定参数,其作用是为了给变参函数确定列表中参数的个数和参数的类型.
typedef void *va_list
#define va_arg(ap,type) (*((type *)(ap))++)
#define va_start(ap,lastfix) (ap=…)
#define va_end(ap)
|
(1) 可变长参数函数用规定格式定义为“类型函数名(firstfix,…,lastfix,…)”.firstfix,…,lastfix表示函数参数列表中的
(2) 指针类型va_list用来说明一个变量ap(argument pointer——可变参数指针),此变量将依次引用可变参数列表中用省略号“…”代替的每一个参数.即指向将要操作的变参.
(3) 宏va_start (ap,lastfix)是为了初始化变参指针ap,以指向可变参数列表中未命名的第一个参数,即指向lastfix后的第一个变参.它必须在指针使用之前调用一次该宏,参数列表中至少有一个未命名的可变参数.从宏定义可知其正确性.
(4) 宏va_arg (ap,type)调用,将ap指向下一个可变参数,而ap的类型由type定,type数据类型不使用float类型.调用后将新的变参可指向一个工作变参,如iap=va_start (ap,int)调用.
(5) 宏va_end (ap)从stdarg.h中看出定义为空,即未定义.其功能完成清除变量ap的作用,表明程序以后不再使用,若该指针变量需再使用,必须重新调用宏va_start 以启动该变量.
#include "stdafx.h"
#include <string.h>
#include <stdio.h>
#include <stdarg.h>
void delSubString(int num,char *sor,)
{
va_list arg_ptr;
int i;
char *q;
int tempnum;
va_start(arg_ptr,sor);
for(tempnum=num; tempnum>0 ; tempnum--)
{
char *arg = va_arg(arg_ptr,char*);
i=strlen(arg);
while((q=strstr(sor,arg))!=NULL)
{
strcpy(q,q+i);
}
printf("_________ ");
printf("%s ",sor);
}
va_end(arg_ptr);
}
void main()
{
char a[150]="Via: SIP/2.0/TLS
ss1.example.com:5061
@nbsp;@nbsp;@nbsp;@nbsp;@nbsp;@nbsp;;branch=z9hG4bK83749a.1
@nbsp;@nbsp;@nbsp;@nbsp;
@nbsp;";
delSubString(2,a,"@nbsp;","
");
printf("@@%s ",a);
getchar();
}
|
程序里有个num,是用来控制变参的个数的,这样更加安全一点。
本
作品由
loseblue创作,采用进行许可。
阅读(930) | 评论(0) | 转发(0) |