zoukankan      html  css  js  c++  java
  • 标准IO库

     

    例子1

     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 #include <stdarg.h>
     4 
     5 char *make_message(const char *fmt, ...) 
     6 {
     7     /* 初始时假设我们只需要不超过100字节大小的空间 */
     8     int n, size = 100;
     9     char *p;
    10     va_list ap;
    11     if ( (p = (char *) malloc(size*sizeof(char))) == NULL)
    12     return NULL;
    13     while (1) 
    14     {
    15         /* 尝试在申请的空间中进行打印操作 */
    16         va_start(ap, fmt);
    17         n = vsnprintf (p, size, fmt, ap);
    18         va_end(ap);
    19         /* 如果vsnprintf调用成功,返回该字符串 */
    20         if (n > -1 && n < size)
    21         return p;
    22         /* vsnprintf调用失败(n<0),或者p的空间不足够容纳size大小的字符串(n>=size),尝试申请更大的空间*/
    23         size *= 2; /* 两倍原来大小的空间 */
    24         if ((p = (char *)realloc(p, size*sizeof(char))) == NULL)
    25         return NULL;
    26     }
    27 }
    28 int main() 
    29 {
    30     /* 调用上面的函数 */
    31     char* str = make_message("%d,%d,%d,%d",5,6,7,8);
    32     printf("%s
    ",str);
    33     free(str);
    34     /* we allocate the memory in the make_message function, so we should release it by caller(main function). */
    35     return 0;
    36 }

    例子2

     1 #include <stdio.h>
     2 #include <stdarg.h>
     3 int mon_log(char *format, ...)
     4 {
     5     char str_tmp[50];
     6     int i = 0;
     7     va_list vArgList;                                                             //定义一个va_list型的变量,这个变量是指向参数的指针.
     8     va_start(vArgList, format);                                         //用va_start宏初始化变量,这个宏的第二个参数是第一个可变参数的前一个参数,是一个固定的参数
     9     i = _vsnprintf(str_tmp, 50, format, vArgList); //注意,不要漏掉前面的_
    10     va_end(vArgList);                                                             //用va_end宏结束可变参数的获取
    11     return i;                                                                             //返回参数的字符个数中间有逗号间隔
    12 }
    13 
    14 void main() 
    15 {
    16     int i = mon_log("%s,%d,%d,%d", "asd", 2, 3, 4);
    17     printf("%d
    ", i);
    18 }
  • 相关阅读:
    简明python_Day2_字典、集合、模块、类、编程习惯
    测试2T2
    测试2T1
    bzoj2761
    一元三次方程求根公式及韦达定理
    状压DP入门——铺砖块
    高精度模板
    测试1T3
    测试1T2
    测试1T1
  • 原文地址:https://www.cnblogs.com/sunbines/p/14386926.html
Copyright © 2011-2022 走看看