函数声明:int vfprintf(FILE *stream, const char *format, va_list arg)

函数参数:

stream—这是指向了FILE对象的指针,该FILE对象标识了流。

format—c语言字符串,包含了要被写入到流stream中的文本。它可以包含嵌入的format标签,被随后的附加参数中指定的值所替代,并按照需求进行格式化。Format标签属性是%[flags][width][.precision][length]specifier。

specifier说明符

输出

c

字符

d(i)

有符号的十进制整数

e

E

使用e字符的科学记数法(尾数和指数)

使用E字符的科学记数法(尾数和指数)

f

十进制浮点数

g

自动选择%e或%f中合适的表示法

G

自动选择%E或%f中合适的表示法

o

有符号的八进制

s

字符的字符串

u

无符号的八进制

x

无符号的十六进制

X

无符号的十六进制(大写)

p

指针地址

n

无输出

%

字符

Flags(标识)

描述

-

在给定的字段宽度内左对齐,默认右对齐

+

强制在结果之前显示加号或减号(+或-)

(space)

如果没有写如何符号,在在该值前插入一个空格

#

与 o、x 或 X 说明符一起使用时,非零值前面会分别显示 0、0x 或 0X。

与 e、E 和 f 一起使用时,会强制输出包含一个小数点,即使后边没有数字时也会显示小数点。默认情况下,如果后边没有数字时候,不会显示显示小数点。

与 g 或 G 一起使用时,结果与使用 e 或 E 时相同,但是尾部的零不会被移除。

0

在指定填充padding的数字左边放置零(0)

Width

描述

(number)

要输出的字符最小数目,如果输出的值短于该数字,结果会用空格填充;如果结果长于该数,结果不会被截断

*

宽度在format字符串中未指定,但是会作为附加整数值参数放置于要被格式化的参数之前

.precision

描述

.number

对于整数说明符(d、i、o、u、x、X):precision 指定了要写入的数字的最小位数。如果写入的值短于该数,结果会用前导零来填充。如果写入的值长于该数,结果不会被截断。精度为 0 意味着不写入任何字符。

对于 e、E 和 f 说明符:要在小数点后输出的小数位数。

对于 g 和 G 说明符:要输出的最大有效位数。

对于 s: 要输出的最大字符数。默认情况下,所有字符都会被输出,直到遇到末尾的空字符。

对于 c 类型:没有任何影响。

当未指定任何精度时,默认为 1。如果指定时不带有一个显式值,则假定为 0。

*

精度在 format 字符串中未指定,但是会作为附加整数值参数放置于要被格式化的参数之前

Length(长度)

描述

h

参数被解释为短整型或无符号短整型

I

参数被解释为长整形或无符号长整形,适用于整型说明符

L

参数被解释为长双精度型

arg – 一个标识可变参数列表的对象。这应被<stdarg> 中定义的va_start宏初始化。

函数返回值:如果成功,则返回字符总数,否则返回一个负数。

实例:

#include<stdio.h>
#include<stdarg.h> void WriteFrmtd(FILE *stream, char *format,...)
{
va_list args;
va_start(args,format);
vfprintf(stream,format,args);
va_end(args);
} int main()
{
FILE *fp;
fp = fopen("file.txt","w");
WriteFrmtd(fp,"this is just onte argument %d \n",);
fclose(fp);
return ;
}

运行以下命令:

exbot@ubuntu:~/wangqinghe/WriteLog/20190708$ gcc vfprintf.c -o vfprintf

exbot@ubuntu:~/wangqinghe/WriteLog/20190708$ ./vfprintf

执行结果:

也可以使用以下程序来查看文件内容:

#include<stdio.h>
int main()
{
FILE *fp;
int c; fp = fopen("file.txt","r");
while()
{
c = fgetc(fp);
if(feof(fp))
{
break;
}
printf("%c",c);
}
fclose(fp);
return ;
}

运行结果:

exbot@ubuntu:~/wangqinghe/WriteLog/20190708$ gedit check.c

exbot@ubuntu:~/wangqinghe/WriteLog/20190708$ gcc check.c -o check

exbot@ubuntu:~/wangqinghe/WriteLog/20190708$ ./check

this is just onte argument 10

函数解释:

fgetc()函数:从文件指针stream指向的文件中读取一个字符,读取一个字节后,光标位置后移一个字节。

表头文件:include<stdio.h>

定义函数:int fgetc(FILE *stream);

返回值:fgetc()会返回读取的字符,若返回EOF则表示到了文件尾,或出现了错误。

feof()函数:

检测文件结束符,若文件结束则返回非0值,否则会返回0.

文件结束符只能被clearerr()清除。

补充:

EOF是文本文件结束的标志。在文本文件中,数据是以字符的ASCⅡ代码值的形式存放,普通字符的ASCⅡ代码的范围是32到127(十进制),EOF的16进制代码为0xFF(十进制为-1),因此可以用EOF作为文件结束标志。

当把数据以二进制形式存放到文件中时,就会有-1值的出现,因此不能采用EOF作为二进制文件的结束标志。为解决这一个问题,ASCI C提供一个feof函数,用来判断文件是否结束。feof函数既可用以判断二进制文件又可用以判断文本文件

vfprintf()函数的更多相关文章

  1. PHP vfprintf() 函数

    实例 把一些文本写入到名为 "test.txt" 的文本文件: <?php高佣联盟 www.cgewang.com$number = 9;$str = "Beiji ...

  2. printf, fprintf, sprintf, snprintf, vprintf, vfprintf, vsprintf, vsnprintf - 输出格式转换函数

    参考:http://blog.sina.com.cn/s/blog_674b5aae0100prv3.html 总览 (SYNOPSIS) #include <stdio.h> int p ...

  3. PHP常用字符串的操作函数

    字符串转换类函数 addcslashes函数:以C语言风格使用反斜线转义字符串中的字符 addslashes函数:使用反斜线引用字符串 chop函数:清除字符串中的连续空格 get_html_tran ...

  4. PHP常用函数大全

    usleep() 函数延迟代码执行若干微秒.unpack() 函数从二进制字符串对数据进行解包.uniqid() 函数基于以微秒计的当前时间,生成一个唯一的 ID.time_sleep_until() ...

  5. PHP常用函数备用

    刚学习php的时候,我也为记忆php函数苦恼不已.认为干嘛记忆这么枯燥无味的东西呢?用的时候查一下手册不就行了吗?但是当时因为身在辅导机构,还是记忆了一大堆自己并不感兴趣的函数. 由此就想起来,小的时 ...

  6. PHP常用函数大全。

    php usleep() 函数延迟代码执行若干微秒. unpack() 函数从二进制字符串对数据进行解包. uniqid() 函数基于以微秒计的当前时间,生成一个唯一的 ID. time_sleep_ ...

  7. PHP 各种函数

    usleep() 函数延迟代码执行若干微秒. unpack() 函数从二进制字符串对数据进行解包. uniqid() 函数基于以微秒计的当前时间,生成一个唯一的 ID. time_sleep_unti ...

  8. php函数整理

    php usleep() 函数延迟代码执行若干微秒. unpack() 函数从二进制字符串对数据进行解包. uniqid() 函数基于以微秒计的当前时间,生成一个唯一的 ID. time_sleep_ ...

  9. 【笔记】php常用函数

    phpusleep() 函数延迟代码执行若干微秒.unpack() 函数从二进制字符串对数据进行解包.uniqid() 函数基于以微秒计的当前时间,生成一个唯一的 ID.time_sleep_unti ...

随机推荐

  1. python自带queue

    from queue import Queue # 线程安全队列 def thread_queue(): q = Queue(3) # 这个队列最多进多少东西 q.put('a') q.put('b' ...

  2. 关于win10安卓真机调试无法找到设备的问题

    之前在win10系统上调试安卓设备,usb接好了,结果居然没有找到设备. 一般出现这种情况可能是电脑的驱动没装好. 于是找了驱动人生大佬来诊断,确实是少了安卓usb驱动. 正常来说用驱动人生装个usb ...

  3. Java EE javax.servlet中的ServletRequest接口

    ServletRequest接口 public interface ServletRequest 子接口:HttpServletRequest 实现类:HttpServletRequestWrappe ...

  4. jvm 中内存的栈和数据结构中的栈的区别

    1.常见的数据结构:栈.队列.数组.链表和红黑树,java内存划分 2.JYM中的栈是先进先出,先入栈的先执行: 2.数据结构中的栈是先进后出,类似手枪的弹夹,先进入的子弹最后才发射: 3.数据结构中 ...

  5. 使用modle1(jsp+javabeans)及cookie技术实现商品展示和浏览记录

    步骤1:创建dbHelper工具类,该类主要用于获取数据库连接,采用单例模式. 步骤2:创建实体类商品类,商品表,在dao实现数据的封装处理. 步骤3:在jsp页面导入实体类,调用DAO的静态方案获取 ...

  6. ReadWriteLock读写之间互斥吗

    开发中遇到并发的问题一般会用到锁,Synchronized存在明显的一个性能问题就是读与读之间互斥:ReadWriteLock是JDK5中提供的读写分离锁.读写分离锁可以有效地帮助减少锁竞争,以提升系 ...

  7. 销售订单(SO)-API-登记销售订单

    登记销售订单可以在新增订单的时候就登记:并不是去修改 flow_status 为booked,而是赋值action request:就下面两句 l_action_request_tbl(l_actio ...

  8. Java ArrayList常用接口介绍及示例

    Java List 常用类型 类型 特征 ArrayList 随机访问元素快:中间插入与删除元素较慢:操作不是线程安全的 LinkedList 中间插入与删除操作代价较低,提供优化的顺序访问:随机访问 ...

  9. TVM调试指南

    1. TVM安装 这部分之前就写过,为了方便,这里再复制一遍. 首先下载代码 git clone --recursive https://github.com/dmlc/tvm 这个地方最好使用--r ...

  10. centos7andcentos6初始化脚本

    #!/bin/bash # get OS verison RELEASEVER=$(rpm -q --qf "%{Version}" $(rpm -q --whatprovides ...