vfprintf()函数

函数声明: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",10);fclose(fp);return 0;
}

运行以下命令:

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(1){c = fgetc(fp);if(feof(fp)){break;}printf("%c",c);}fclose(fp);return 0;
}

运行结果:

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函数既可用以判断二进制文件又可用以判断文本文件

转载于:https://www.cnblogs.com/wanghao-boke/p/11152091.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/385000.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Makefile(二)

将生产的.o文件放进指定的文件中&#xff08;先创建该文件夹&#xff09; src $(wildcard ./*.cpp) obj $(patsubst %.cpp,./output/%.o,$(src))target test$(target) : $(obj)g $(obj) -o $(target) %.o: %.cppg -c $< -o output/$.PHONY:clean clean:rm -f $(target) $…

TCP粘包问题分析和解决(全)

TCP通信粘包问题分析和解决&#xff08;全&#xff09;在socket网络程序中&#xff0c;TCP和UDP分别是面向连接和非面向连接的。因此TCP的socket编程&#xff0c;收发两端&#xff08;客户端和服务器端&#xff09;都要有成对的socket&#xff0c;因此&#xff0c;发送端为了将…

UML类图符号 各种关系说明以及举例

UML中描述对象和类之间相互关系的方式包括&#xff1a;依赖&#xff0c;关联&#xff0c;聚合&#xff0c;组合&#xff0c;泛化&#xff0c;实现等。表示关系的强弱&#xff1a;组合>聚合>关联>依赖 相互间关系 聚合是表明对象之间的整体与部分关系的关联&#xff0c…

寻找数组中第二大数

设置两个数值来表示最大数和第二大数&#xff0c;在循环比较赋值即可 //找给定数组中第二大的数int get_smax(int *arr,int length) {int max;int smax;if(arr[0] > arr[1]){max arr[0];smax arr[1];}else{max arr[1];smax arr[0];}for(int i 2; i < length; i){if(…

timerfd API使用总结

timerfd 介绍 timerfd 是在Linux内核2.6.25版本中添加的接口&#xff0c;其是Linux为用户提供的一个定时器接口。这个接口基于文件描述符&#xff0c;所以可以被用于select/poll/epoll的场景。当使用timerfd API创建多个定时器任务并置于poll中进行事件监听&#xff0c;当没有可…

#if/#else/#endif

在linux环境下写c代码时会尝试各种方法或调整路径&#xff0c;需要用到#if #include<stdio.h>int main(){int i; #if 0i 1; #elsei 2; #endifprintf("i %d",i);return 0; } 有时候会调整代码&#xff0c;但是又不是最终版本的更换某些值&#xff0c;就需要注…

内存分配调用

通过函数给实参分配内存&#xff0c;可以通过二级指针实现 #include<stdio.h> #incldue<stdlib.h>void getheap(int *p) //错误的模型 {p malloc(100); }void getheap(int **p) //正确的模型 {*p malloc(100); } int main() {int *p NULL;getheap(&p);free(p…

ESP传输模式拆解包流程

一、 ESP简介ESP&#xff0c;封装安全载荷协议(Encapsulating SecurityPayloads)&#xff0c;是一种Ipsec协议&#xff0c;用于对IP协议在传输过程中进行数据完整性度量、来源认证、加密以及防回放攻击。可以单独使用&#xff0c;也可以和AH一起使用。在ESP头部之前的IPV4…

结构体成员内存对齐

#include<stdio.h> struct A {int A; };int main() {struct A a;printf("%d\n",sizeof(a));return 0; } 运行结果&#xff1a;4 #include<stdio.h> struct A {int a;int b&#xff1b; };int main() {struct A a;printf("%d\n",sizeof(a))…

C库函数-fgets()

函数声明&#xff1a;char *fgets(char *str,int n,FILE *stream) 函数介绍&#xff1a;从指定的stream流中读取一行&#xff0c;并把它存储在str所指向的字符串中。当读取到&#xff08;n-1&#xff09;个字符时&#xff0c;获取读取到换行符时&#xff0c;或者到达文件末尾时…

linux内核netfilter模块分析之:HOOKs点的注册及调用

1: 为什么要写这个东西?最近在找工作,之前netfilter 这一块的代码也认真地研究过&#xff0c;应该每个人都是这样的你懂 不一定你能很准确的表达出来。 故一定要化些时间把这相关的东西总结一下。 0&#xff1a;相关文档linux 下 nf_conntrack_tuple 跟踪记录 其中可以根据内…

指定结构体元素的位字段

struct B {char a:4; //a这个成员值占了4bitchar b:2;char c:2; } 占了1个字节 struct B {int a:4; //a这个成员值占了4bitchar b:2;char c:2; } 占了8个字节 控制LED灯的结构体&#xff1a; struct E {char a1:1;char a2:1;char a3:1;char a4:1;char a5:1;char a6:1;char a7:1…

网络抓包工具 wireshark 入门教程

Wireshark&#xff08;前称Ethereal&#xff09;是一个网络数据包分析软件。网络数据包分析软件的功能是截取网络数据包&#xff0c;并尽可能显示出最为详细的网络数据包数据。Wireshark使用WinPCAP作为接口&#xff0c;直接与网卡进行数据报文交换。网络管理员使用Wireshark来…

结构体中指针

结构体中带有指针的情况 #include<stdio.h>struct man {char *name;int age; };int main() {struct man m {"tom",20};printf("name %s, age %d\n",m.name,m.age);return 0; } 运行结果&#xff1a; exbotubuntu:~/wangqinghe/C/20190714$ gcc st…

python使用opencv提取视频中的每一帧、最后一帧,并存储成图片

提取视频每一帧存储图片 最近在搞视频检测问题&#xff0c;在用到将视频分帧保存为图片时&#xff0c;图片可以保存&#xff0c;但是会出现(-215:Assertion failed) !_img.empty() in function cv::imwrite问题而不能正常运行&#xff0c;在检查代码、检查路径等措施均无果后&…

结构体参数

结构体作为函数参数&#xff1a; #include<stdio.h> #include<stdlib.h> #include<string.h>struct student {char name[10];int age; };void print_student(struct student s) {printf("name %s,age %d\n",s.name,s.age); } void set_studen…

线程间通信之eventfd

线程间通信之eventfd man手册中的解释&#xff1a; eventfd()创建了一个“eventfd对象”&#xff0c; 通过它能够实现用户态程序间(我觉得这里主要指线程而非进程)的等待/通知机制&#xff0c;以及内核态向用户态通知的机制&#xff08;未考证&#xff09;。 此对象包含了一个…

【linux 开发】定时器使用setitimer

setitimer Linux 为每一个进程提供了 3 个 setitimer 间隔计时器&#xff1a; ITIMER_REAL&#xff1a;减少实际时间&#xff0c;到期的时候发出 SIGALRM 信号。ITIMER_VIRTUAL&#xff1a;减少有效时间 (进程执行的时间)&#xff0c;产生 SIGVTALRM 信号。ITIMER_PROF&#…

文件操作(写)

/*** file.c ***/ #include<stdio.h>int main() {//用写的方式打开一个文件 //w的意思是文件如果不存在&#xff0c;就建立一个文件&#xff0c;如果文件存在就覆盖FILE *p fopen("/home/exbot/wangqinghe/C/20190716/file1.txt","w");fputs(&qu…

定时器timerfd

1.为什么要加入此定时器接口 linux2.6.25版本新增了timerfd这个供用户程序使用的定时接口&#xff0c;这个接口基于文件描述符&#xff0c;当超时事件发生时&#xff0c;该文件描述符就变为可读。我首次接触这个新特性是在muduo网络库的定时器里看到的&#xff0c;那么新增一个…