【C语言】vfprintf函数

vfprintf 是 C 语言中的一个函数,它是 fprintf 函数的变体,用于格式化输出到文件中。vfprintf 函数接受一个格式化字符串和一个指向可变参数列表的指针,这个列表通常是通过 va_list 类型来传递的。vfprintf 函数的主要用途是在需要处理不定数量的参数时,提供一种灵活的输出格式化方式。

原型

int vfprintf(FILE *stream, const char *format, va_list ap);
  1. stream 是指向一个 FILE 对象的指针,这个对象代表了一个输出流,通常是打开的文件。
  2. format 是一个格式化字符串,它包含一个或多个格式化指令,这些指令将被用来格式化输出。
  3. ap 是一个指向 va_list 类型的指针,va_list 是一个用来表示可变参数列表的类型。

说明

vfprintf 函数中,va_list 类型用于访问参数列表中的各个参数。va_list 实际上是一个简单的类型定义,通常定义为 typedef int va_list,它只是一个整数类型的别名,用于在参数列表中进行偏移计算。

使用 vfprintf 函数时,通常需要结合 va_startva_argva_end 宏来正确地处理可变参数列表。这些宏用于初始化 va_list 变量、获取参数列表中的下一个参数以及清理 va_list 变量,它们通常在 stdarg.h 头文件中定义。

vfprintf 函数根据 format 字符串和 ap参数列表的内容,将格式化的数据写入到 stream 指向的文件中。如果函数成功执行,它将返回写入的字符数。如果出现错误,它将返回一个负值。

这个函数通常与 <stdio.h> 和 <stdarg.h> 头文件一起使用。

示例

#include <stdio.h>  
#include <stdarg.h>  
  
int vfp(FILE *stream, char *fmt, ...) {  
    va_list args;  
    va_start(args, fmt);  
    int cnt = vfprintf(stream, fmt, args);  
    va_end(args);  
    return cnt;  
}  
  
int main() {  
    FILE *fp;  
    int inumber = 30;  
    float fnumber = 90.0;  
    char string[4] = "abc";  
    fp = tmpfile();  
    if (fp == NULL) {  
        perror("tmpfile() error");  
        return 1;  
    }  
    vfp(fp, "%d %f %s", inumber, fnumber, string);  
    if (fseek(fp, 0L, SEEK_SET) == -1) {  
        perror("fseek() error");  
        return 1;  
    }  
    if (ftell(fp) == -1L) {  
        perror("ftell() error");  
        return 1;  
    } else {  
        printf("The file position is now %ld.\n", ftell(fp));  
    }  
    return 0;  
}

相关推荐

  1. C语言——assert函数

    2023-12-10 00:32:02       62 阅读
  2. C语言——const函数

    2023-12-10 00:32:02       56 阅读
  3. c语言突击函数

    2023-12-10 00:32:02       75 阅读
  4. C语言字符串函数

    2023-12-10 00:32:02       70 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-10 00:32:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-10 00:32:02       100 阅读
  3. 在Django里面运行非项目文件

    2023-12-10 00:32:02       82 阅读
  4. Python语言-面向对象

    2023-12-10 00:32:02       91 阅读

热门阅读

  1. MySQL注入入门简述

    2023-12-10 00:32:02       54 阅读
  2. CCF计算机软件能力认证考试—202209-1如此编码

    2023-12-10 00:32:02       39 阅读
  3. 高云GW1NSR-4C开发板上手使用

    2023-12-10 00:32:02       71 阅读
  4. 【Qt5】setWindowFlags的标志有哪些?

    2023-12-10 00:32:02       46 阅读
  5. 车联网安全学习路标

    2023-12-10 00:32:02       61 阅读
  6. 如何访问内部网络做内网穿透

    2023-12-10 00:32:02       59 阅读
  7. GO设计模式——7、适配器模式(结构型)

    2023-12-10 00:32:02       50 阅读
  8. VueUse工具库

    2023-12-10 00:32:02       74 阅读
  9. string类的常用方法

    2023-12-10 00:32:02       62 阅读
  10. C++知识点总结(8):尺取法

    2023-12-10 00:32:02       55 阅读
  11. go-factory工厂模式样例

    2023-12-10 00:32:02       55 阅读