c语言变参函数的使用和删除多个子串

我的感觉是变参函数就是一个套子,有固定的格式,你把具体内容往这个套子里一套就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 以启动该变量. 

源代码:

 

/*  http://blog.csdn.net/loseblue/ */
/*No Copy Right*/


#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,是用来控制变参的个数的,这样更加安全一点。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值