C语言 <stdio.h> vsprintf() 函数

  • 描述

    C库函数int vsprintf(char *str, const char *format, va_list arg)使用传递给它的参数列表将格式化的输出发送到字符串。
  • 声明

    以下是vsprintf()函数的声明。
    
    int vsprintf(char *str, const char *format, va_list arg)
    
    参数
    • str - 这是将存储结果字符串的char元素数组。
    • format -这是C字符串,其中包含要写入str的文本。它可以选择包含嵌入的格式标签,这些标签由后续附加参数中指定的值替换,并按要求进行格式化。格式标签原型%[flags][width][.precision][length]指示符,其说明如下-
    • specifier 说明
      c 字符
      d or i 有符号十进制整数
      e 使用e字符的科学计数法(尾数/指数)
      E 使用E字符的科学计数法(尾数/指数)
      f 十进制浮点数
      g 使用%e或%f中的较短者
      G 使用%E或%f中的较短者
      o 有符号八进制
      s 字串串
      u 无符号十进制整数
      x 无符号十六进制整数
      X 无符号十六进制整数(大写字母)
      p 指针地址
      n 什么都不打印
      % 字符
      flags 说明
      - 在给定的字段宽度内左对齐; 右对齐是默认设置(请参见width子说明符)。
      + 强制在结果前加上一个加号或减号(+或-),即使对于正数也是如此。 默认情况下,仅负数前面带有-ve号。
      (space)空格 如果未写入任何符号,则在值之前插入空格。
      # 与o,x或X说明符一起使用。 对于不等于零的值,该值分别以0、0x或0X开头。 与e,E和f一起使用时,即使后面没有数字,它也会强制写入的输出包含小数点。 默认情况下,如果没有数字跟随,则不写入小数点。 与g或G一起使用时,结果与e或E相同,但不会删除尾随零。
      0 用零(0)而不是空格左键填充数字(在其中指定了填充)(请参见宽度子说明符)。
      width 说明
      (number) 最少要打印的字符数。 如果要打印的值小于此数字,则结果将用空格填充。 即使结果较大,该值也不会被截断。
      * 宽度不是在格式字符串中指定的,而是作为必须格式化的参数之前的附加整数值参数。
      .precision 说明
      .number 对于整数说明符(d,i,o,u,x,X)-precision指定要写入的最小位数。 如果要写入的值短于该数字,则结果将以前导零填充。 即使结果更长,该值也不会被截断。 精度为0表示不为0写入任何字符。对于e,E和f指示符:这是小数点后要打印的位数。 对于g和G指定符:这是要打印的最大有效位数。 对于s:这是要打印的最大字符数。 默认情况下,将打印所有字符,直到遇到结尾的空字符为止。 对于c类型:无效。 如果未指定精度,则默认值为1。如果指定的期间没有明确的精度值,则假定为0。
      .* 精度不是在格式字符串中指定的,而是作为必须格式化的参数之前的附加整数值参数指定的。
      length 说明
      h 该参数被解释为short int或unsigned short int(仅适用于整数说明符:i,d,o,u,x和X)。
      l 对于整数说明符(i,d,o,u,x和X),该参数解释为long int或unsigned long int,对于说明符c和s解释为宽字符或宽字符串。
      L 该参数被解释为长整数(仅适用于浮点说明符:e,E,f,g和G)。
    • arg - 表示变量参数列表的对象。这应该由<stdarg>中定义的va_start宏初始化。
  • 返回值

    如果成功,则返回写入的字符总数,否则返回负数。
    示例
    以下示例显示vsprintf()函数的用法-
    
    #include <stdio.h>
    #include <stdarg.h>
    
    char buffer[80];
    int vspfunc(char *format, ...) {
       va_list aptr;
       int ret;
    
       va_start(aptr, format);
       ret = vsprintf(buffer, format, aptr);
       va_end(aptr);
    
       return(ret);
    }
    
    int main () {
       int i = 5;
       float f = 27.0;
       char str[50] = "jc2182.com";
    
       vspfunc("%d %f %s", i, f, str);
       printf("%s\n", buffer);
       
       return(0);
    }
    
    尝试一下
    让我们编译并运行以上程序,这将产生以下结果-
    
    5 27.000000 jc2182.com