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.pswp.cn/news/385000.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/385000.shtml
英文地址,請注明出處:http://en.pswp.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;那么新增一個…