、【C語言基礎】 第十天 | 知識點總結

Cohen_ina發表於2020-10-11

在這裡插入圖片描述

printf — sprintf — fprintf:
	變參函式:引數形參中 有“..., 最後一個固參通常是格式描述串(包含格式匹配符), 函式的引數個數、型別、順序由這個固參決定。

	printf("hello");
		
	printf("%s", "hello");

	printf("ret = %d+%d\n", 10, 5);

	printf("%d = %d%c%d\n", 10+5, 10, '+', 5);			--> 螢幕


	char buf[1024];   //緩衝區  

	sprintf(buf, "%d = %d%c%d\n", 10+5, 10, '+', 5);		--> buf 中

	FILE * fp = fopen();

	fprintf(fp, "%d = %d%c%d\n", 10+5, 10, '+', 5);			--> fp 對應的檔案中
scanf — sscanf — fscanf
	scanf("%d", &m);		鍵盤 --> m


	char str[] = "98";

	sscanf(str, "%d", &m);		str --> m


	FILE * fp = fopen("r");

	fscanf(fp, "%d", &m);		fp指向的檔案中 --> m

fprintf()函式:
int fprintf(FILE * stream, const char * format, ...);
fscanf()函式:
int fscanf(FILE * stream, const char * format, ...);

		成功:正確匹配的個數。

		失敗: -1

	1) 邊界溢位。 儲存讀取的資料空間。在使用之前清空。

	2)fscanf函式,每次在呼叫時都會判斷下一次呼叫是否匹配引數2, 如果不匹配提前結束讀檔案。(feof(fp) 為真)。

練習:檔案版排序
	生成隨機數,寫入檔案。將檔案內亂序隨機數讀出,排好序再寫回檔案。
fgetc --- fputc

fgets --- fputs

fprintf -- fscanf		預設處理文字檔案。

fwrite()函式: 既可處理以文字檔案。也處理二進位制檔案。
	寫出資料到檔案中。

	stu_t stu[4] = { ...... };

	size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);1:待寫出的資料的地址

		參2:待寫出資料的大小

		參3:寫出的個數				--2 x 參3 = 寫出資料的總大小。

		參4:檔案

		返回值: 成功:永遠是 參3 的值。 --- 通常將參21. 將參3傳實際寫出位元組數。

			 失敗:0 
fread()函式:
	從檔案fp中讀出資料。

	size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);1:讀取到的資料儲存的位置

		參2:一次讀取的位元組數

		參3:讀取的次數				--2 x 參3 = 讀出資料的總大小

		參4:檔案

		返回值: 成功:引數3.	--- 通常將參21. 將參3傳欲讀出的位元組數。				

			 0:讀失敗 -- 到達檔案結尾 -- feof(fp)為真。 
練習:大檔案拷貝
	已知一個任意型別的檔案,對該檔案複製,產生一個相同的新檔案。

	1. 開啟兩個檔案, 一個“r”, 另一“w”

	2. 從r中 fread , fwrite到 w 檔案中。

	3. 判斷到達檔案結尾 終止。  

	4. 關閉。

	注意: 在windows下,開啟二進位制檔案(mp3、mp4、avi、jpg...)時需要使用“b”。如:“rb”、“wb”
	
隨機位置 讀:
	檔案讀寫指標。在一個檔案內只有一個。

	fseek():

		int fseek(FILE *stream, long offset, int whence);1:檔案

			參2:偏移量(向量: + 向後, - 向前)

			參3SEEK_SET:檔案開頭位置

				SEEK_CUR:當前位置

				SEEK_END:檔案結尾位置

		返回值: 成功:0, 失敗: -1

	ftell():

		獲取檔案讀寫指標位置。

		long ftell(FILE *stream);

		返回:從檔案當前讀寫位置到起始位置的偏移量。

		
		藉助 ftell(fp) + fseek(fp, 0, SEEK_END); 來獲取檔案大小。

	rewind():

		回捲檔案讀寫指標。 將讀寫指標移動到起始位置。

		void rewind(FILE *stream);
Linux和windows檔案區別:
	1)對於二進位制檔案操作, Windows 使用“b”, Linux下二進位制和文字沒區別。

	2)windows下,回車 \r, 換行 \n。 \r\n  , Linux下 回車換行\n

	3) 對檔案指標,先寫後讀。windows和Linux效果一致。

		       先讀後寫。Linux無需修改。windows下需要在寫操作之前新增 fseek(fp, 0, SEEK_CUR); 來獲取檔案讀寫指標,使之生效。
獲取檔案狀態:
	開啟檔案,對於系統而言,系統資源消耗較大。

	int stat(const char *path, struct stat *buf);1: 訪問檔案的路徑

		參2: 檔案屬性結構體

		返回值: 成功: 0, 失敗: -1
刪除、重新命名檔案:
	int remove(const char *pathname); 刪除檔案。

	int rename(const char *oldpath, const char *newpath);  重名檔案
緩衝區重新整理:
	標準輸出-- stdout -- 標準輸出緩衝區。   寫給螢幕的資料,都是先存緩衝區中,由緩衝區一次性重新整理到物理裝置(螢幕)

	標準輸入 -- stdin -- 標準輸入緩衝區。	從鍵盤讀取的資料,直接讀到 緩衝區中, 由緩衝區給程式提供資料。

	預讀入、緩輸出。

	行緩衝:printf(); 遇到\n就會將緩衝區中的資料重新整理到物理裝置上。

	全緩衝:檔案。 緩衝區存滿, 資料重新整理到物理裝置上。

	無緩衝:perror。 緩衝區中只要有資料,就立即重新整理到物理裝置。

	

	檔案關閉時, 緩衝區會被自動重新整理。  隱式回收:關閉檔案、重新整理緩衝區、釋放malloc

	手動重新整理緩衝區: 實時重新整理。

		int fflush(FILE *stream);

			成功:0

			失敗:-1


更多有關於Linux C++後臺開發的學習分享,感興趣的朋友們可以關注我的個人公眾號
在這裡插入圖片描述

相關文章