va_start&strcat&strstr

来源:互联网 发布:java黑马程序员 编辑:程序博客网 时间:2024/06/05 22:31

1.va_start&va_arg& va_end  

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_list,va_start,va_end为何意?  
      注:vsprintf的前俩个参数与sprintf相同:保存结果的字符缓冲区和  
  格式字符串,第三个:指向格式化参数数组的指针。

-----------------------------------------------------------------

取得可变参数的,可以参考一下msdn上的这个例子  
  Example  
   
  /*   VA.C:   The   program   below   illustrates   passing   a   variable  
    *   number   of   arguments   using   the   following   macros:  
    *             va_start                         va_arg                             va_end  
    *             va_list                           va_dcl   (UNIX   only)  
    */  
   
  #include   <stdio.h>  
  #define   ANSI                         /*   Comment   out   for   UNIX   version           */  
  #ifdef   ANSI                           /*   ANSI   compatible   version                     */  
  #include   <stdarg.h>  
  int   average(   int   first,   ...   );  
  #else                                       /*   UNIX   compatible   version                     */  
  #include   <varargs.h>  
  int   average(   va_list   );  
  #endif  
   
  void   main(   void   )  
  {  
        /*   Call   with   3   integers   (-1   is   used   as   terminator).   */  
        printf(   "Average   is:   %d/n",   average(   2,   3,   4,   -1   )   );  
   
        /*   Call   with   4   integers.   */  
        printf(   "Average   is:   %d/n",   average(   5,   7,   9,   11,   -1   )   );  
   
        /*   Call   with   just   -1   terminator.   */  
        printf(   "Average   is:   %d/n",   average(   -1   )   );  
  }  
   
  /*   Returns   the   average   of   a   variable   list   of   integers.   */  
  #ifdef   ANSI                           /*   ANSI   compatible   version         */  
  int   average(   int   first,   ...   )  
  {  
        int   count   =   0,   sum   =   0,   i   =   first;  
        va_list   marker;  
   
        va_start(   marker,   first   );           /*   Initialize   variable   arguments.   */  
        while(   i   !=   -1   )  
        {  
              sum   +=   i;  
              count++;  
              i   =   va_arg(   marker,   int);  
        }  
        va_end(   marker   );                             /*   Reset   variable   arguments.             */  
        return(   sum   ?   (sum   /   count)   :   0   );  
  }  
  #else               /*   UNIX   compatible   version   must   use   old-style   definition.     */  
  int   average(   va_alist   )  
  va_dcl  
  {  
        int   i,   count,   sum;  
        va_list   marker;  
   
        va_start(   marker   );                         /*   Initialize   variable   arguments.   */  
        for(   sum   =   count   =   0;   (i   =   va_arg(   marker,   int))   !=   -1;   count++   )  
              sum   +=   i;  
        va_end(   marker   );                             /*   Reset   variable   arguments.             */  
        return(   sum   ?   (sum   /   count)   :   0   );  
  }  
  #endif  
   
   
  Output  
   
  Average   is:   3  
  Average   is:   8  
  Average   is:   0  
   
   
  更多的看看msdn 

$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$

2.strstr(a,b)求子字符串b在a中出现的位置;

strcat(a,b)将字符串b拼接到字符串a的后面;