、【C語言基礎】 第十天 | 知識點總結
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 的值。 --- 通常將參2 傳 1. 將參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. --- 通常將參2 傳 1. 將參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:偏移量(向量: + 向後, - 向前)
參3: SEEK_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++後臺開發的學習分享,感興趣的朋友們可以關注我的個人公眾號
相關文章
- c語言基礎知識C語言
- c語言常用小知識點總結1C語言
- python基礎語法知識點總結Python
- c語言基礎知識3C語言
- Java基礎知識點總結Java
- ES 基礎知識點總結
- Redis 基礎知識點總結Redis
- C語言知識彙總 | 00-C語言知識彙總目錄C語言
- 前端知識點總結——JavaScript基礎前端JavaScript
- Flutter 知識點總結-基礎篇Flutter
- Java基礎面試知識點總結Java面試
- 【C/C++】C語言基礎知識【第二版】C++C語言
- C 語言複雜知識點
- 組合語言-基礎知識組合語言
- Java個人知識點總結(基礎篇)Java
- Java基礎知識總結Java
- React 基礎知識總結React
- SpringIOC基礎知識總結Spring
- Rust 基礎知識總結Rust
- 索引基礎知識總結索引
- 【C++】 C++知識點總結C++
- 【建議收藏】Go語言關鍵知識點總結Go
- Linux基礎知識和基本操作語句總結Linux
- 後端知識點總結——NODE.JS基礎後端Node.js
- Go語言基礎語法總結Go
- go語言學習-基礎知識Go
- Go語言:包管理基礎知識Go
- C語言位運算子知識總結和例項分析C語言
- JS基礎知識深入總結JS
- TCP/IP 基礎知識總結TCP
- JS基礎知識總結(1)JS
- CSS基礎知識總結(4)CSS
- JS基礎知識總結(2)JS
- Java基礎知識總結-1Java
- 前端知識點總結——C3前端
- yii2 基礎知識總結
- 演算法基礎知識總結演算法
- Java基礎對反射知識總結Java反射