stephen_lamb

vsprintf()

0
阅读(1691)

vsprintf()函数中的自变量是位于数组中的,数组元素的字符串之前都要加上百分号(%)。这个函数是“一步一步[step-by-step]”按顺序执行。在第一个%后,将插入第一个数组元素;在第二个%后,将插入第二个数组元素,依次类推。

vsprintf是sprintf的一个变形,它只有三个参数。vsprintf用於执行有多个参数的自订函式,类似printf格式。vsprintf的前两个参数与sprintf相同:一个用於保存结果的字元缓冲区和一个格式字串。第三个参数是指向格式化参数阵列的指标。实际上,该指标指向在堆叠中供函式呼叫的变数。va_list、va_start和va_end巨集(在STDARG.H中定义)帮助我们处理堆叠指标。本章最後的SCRNSIZE程式展示了使用这些巨集的方法。使用vsprintf函式,sprintf函式可以这样编写:

int sprintf (char * szBuffer, const char * szFormat, ...){ int iReturn ; va_list pArgs ; va_start (pArgs, szFormat) ; iReturn = vsprintf (szBuffer, szFormat, pArgs) ; va_end (pArgs) ; return iReturn ;}

va_start巨集将pArg设置为指向一个堆叠变数,该变数位址在堆叠参数szFormat的上面。

函数名:  vsprintf   

 功   能:  送格式化输出到串中   

 用   法:  int  vsprintf(char  *string,  char  *format,  va_list  param);   

 程序例:   

  

 #include  <stdio.h>   

 #include  <conio.h>   

 #include  <stdarg.h>   

  

 char  buffer[80];   

  

 int  vspf(char  *fmt,  ...)   

 {   

    va_list  argptr;   

    int  cnt;   

  

    va_start(argptr,  fmt);   

    cnt  =  vsprintf(buffer,  fmt,  argptr);   

    va_end(argptr);   

  

    return(cnt);   

 }   

  

 int  main(void)   

 {   

    int  inumber  =  30;   

    float  fnumber  =  90.0;   

    char  string[4]  =  "abc";   

  

    vspf("%d  %f  %s",  inumber,  fnumber,  string);   

    printf("%s\n",  buffer);   

    return  0;   

 }  

 va_list  ap;  

 int  len;  

 va_start(ap,  format);  

 vsprintf(_this->printfBuf,  format,  ap)  

 va_end(ap);  

  

 请问vsprintf的作用干什么啊?根据上面代码能详细介绍下吗?谢谢!  

 ===============================  

 参数 ap  按照  format  指定的格式,  

 写到  _this->printfBuf  

基本和  sprinf  类似  ......

 比如上面给的例子:  

 vsprintf(buffer,  fmt,  argptr);   

  

 fmt="%d  %f  %s"   

 就是把后面的参数按照  "%d  %f  %s"   这个格式输出到  buffer  

注:此博文引用他人而来