Chinaunix首页 | 论坛 | 博客
  • 博客访问: 142792
  • 博文数量: 61
  • 博客积分: 1410
  • 博客等级: 上尉
  • 技术积分: 590
  • 用 户 组: 普通用户
  • 注册时间: 2009-03-03 15:26
文章分类

全部博文(61)

文章存档

2010年(9)

2009年(52)

我的朋友

分类: C/C++

2009-03-04 16:16:25

我的感觉是变参函数就是一个套子,有固定的格式,你把具体内容往这个套子里一套就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创作,采用进行许可。
阅读(875) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~