色五月色开心色婷婷色丁香,五月婷婷丁香花综合网,婷婷丁香五月激情综合在线,五月婷婷六月丁香动漫,婷婷丁香五月激情综合在线,丁香花中文字幕在线观看,播五月色五月开心五月网,开心激情综合网,狠狠色丁香婷婷综合最新地址,丁香视频在线观看,狠狠做六月爱婷婷综合av,久久激情五月丁香伊人

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營(yíng)的一線實(shí)戰(zhàn)洞察。

C語(yǔ)言文件操作全解析:從文本/二進(jìn)制讀寫到實(shí)戰(zhàn)學(xué)生管理系統(tǒng)

C語(yǔ)言文件操作全解析:從文本/二進(jìn)制讀寫到實(shí)戰(zhàn)學(xué)生管理系統(tǒng) 1. 項(xiàng)目概述為什么C語(yǔ)言文件操作是程序員的“基本功”在編程世界里數(shù)據(jù)是程序的血液而文件則是存儲(chǔ)這些血液的“血管”和“倉(cāng)庫(kù)”。無(wú)論你是在開發(fā)一個(gè)簡(jiǎn)單的學(xué)生成績(jī)管理系統(tǒng)還是一個(gè)復(fù)雜的日志分析工具最終都需要將程序運(yùn)行的結(jié)果保存下來(lái)或者從外部讀取配置和數(shù)據(jù)。C語(yǔ)言作為一門貼近系統(tǒng)底層的語(yǔ)言其文件操作功能強(qiáng)大而直接是理解計(jì)算機(jī)如何與存儲(chǔ)介質(zhì)交互的絕佳窗口。很多初學(xué)者覺得指針難、內(nèi)存管理復(fù)雜但往往忽略了文件操作這塊同樣重要且實(shí)用的基石。掌握它意味著你的程序從此有了“記憶”和“與外界對(duì)話”的能力不再是一次性的玩具。簡(jiǎn)單來(lái)說(shuō)C語(yǔ)言的文件操作就是教會(huì)你的程序如何打開一個(gè)磁盤上的文件、讀取里面的內(nèi)容、寫入新的數(shù)據(jù)以及最后如何正確地關(guān)閉它。這聽起來(lái)簡(jiǎn)單但里面的門道不少文本文件和二進(jìn)制文件有什么區(qū)別用fscanf讀數(shù)據(jù)和用fread讀數(shù)據(jù)底層邏輯有何不同為什么我的文件指針會(huì)亂跳這些問(wèn)題都是實(shí)際開發(fā)中必然會(huì)遇到的坑。今天我們就拋開那些枯燥的語(yǔ)法定義從一個(gè)實(shí)際開發(fā)者的角度把C語(yǔ)言文件操作的里里外外、注意事項(xiàng)和實(shí)戰(zhàn)技巧一次講透。2. 核心概念與文件類型辨析在動(dòng)手寫代碼之前我們必須先理清幾個(gè)核心概念。這就像木匠干活前得先分清刨子和鑿子的區(qū)別一樣。2.1 文本文件 vs 二進(jìn)制文件本質(zhì)區(qū)別這是文件操作第一個(gè)也是最重要的分水嶺。很多混淆都源于對(duì)這兩者區(qū)別的模糊認(rèn)識(shí)。文本文件 你可以把它想象成一封由純文字寫成的信。它的內(nèi)容完全由字符ASCII、UTF-8等編碼構(gòu)成比如.txt,.c,.html文件。當(dāng)你用記事本打開時(shí)看到的就是可讀的文字。在C語(yǔ)言中我們通常以“文本模式”打開這類文件。關(guān)鍵特性 存在“換行符”的轉(zhuǎn)換。在Windows系統(tǒng)中換行是\r\n回車換行而在Linux/Unix系統(tǒng)中是\n。當(dāng)以文本模式打開文件時(shí)C標(biāo)準(zhǔn)庫(kù)會(huì)自動(dòng)進(jìn)行這種轉(zhuǎn)換讓你用\n就能統(tǒng)一處理。但這也意味著如果你把一個(gè)包含\r\n的文件以二進(jìn)制模式讀取你會(huì)看到這兩個(gè)字符以文本模式讀取庫(kù)函數(shù)會(huì)幫你“消化”掉\r。二進(jìn)制文件 這更像是一個(gè)裝滿各種零件字節(jié)的盒子。它存儲(chǔ)的是數(shù)據(jù)最原始的字節(jié)序列如圖片.jpg、可執(zhí)行程序.exe、或者你用fwrite保存的結(jié)構(gòu)體數(shù)據(jù)。用記事本打開二進(jìn)制文件你會(huì)看到一堆亂碼。關(guān)鍵特性 沒(méi)有任何轉(zhuǎn)換一個(gè)字節(jié)就是一個(gè)字節(jié)原樣讀原樣寫。這是保存程序內(nèi)部數(shù)據(jù)結(jié)構(gòu)如數(shù)組、結(jié)構(gòu)體最直接的方式。注意 這個(gè)區(qū)別直接決定了你打開文件時(shí)使用的模式如r是文本讀rb是二進(jìn)制讀以及你后續(xù)該用哪一組函數(shù)fprintf/fscanf用于文本fwrite/fread用于二進(jìn)制?;煊檬菫?zāi)難性的錯(cuò)誤來(lái)源。2.2 文件指針與流操作的把手在C語(yǔ)言中你對(duì)文件的所有操作都是通過(guò)一個(gè)叫做FILE*文件指針的句柄來(lái)進(jìn)行的。你可以把它理解為你去圖書館借書時(shí)管理員給你的一張“借閱卡”。有了這張卡你才能找書、看書、還書。FILE是一個(gè)結(jié)構(gòu)體類型定義在stdio.h中它包含了管理文件流所需的所有信息比如當(dāng)前讀寫位置、文件的錯(cuò)誤標(biāo)志、緩沖區(qū)信息等。我們不需要知道它的具體細(xì)節(jié)只需要聲明一個(gè)FILE*類型的指針變量例如FILE *fp;然后通過(guò)標(biāo)準(zhǔn)庫(kù)函數(shù)如fopen將它與一個(gè)具體的磁盤文件關(guān)聯(lián)起來(lái)?!傲鳌盨tream是一個(gè)更抽象的概念。你可以把它想象成連接你的程序和文件之間的一條數(shù)據(jù)“河流”。輸入流讓數(shù)據(jù)從文件“流”向你的程序讀操作輸出流讓數(shù)據(jù)從你的程序“流”向文件寫操作。FILE*就是控制這條河流閘門的把手。2.3 文件訪問(wèn)模式你想干什么調(diào)用fopen函數(shù)時(shí)第二個(gè)參數(shù)是一個(gè)字符串指明了你打開文件的意圖。選錯(cuò)了模式輕則操作失敗重則數(shù)據(jù)損壞。模式字符串含義文件不存在時(shí)文件存在時(shí)主要用途r只讀文本出錯(cuò)返回NULL打開文件指針在開頭讀取配置文件、文本數(shù)據(jù)w只寫文本創(chuàng)建新文件清空原文件內(nèi)容創(chuàng)建新的日志文件、輸出報(bào)告a追加文本創(chuàng)建新文件打開文件指針在末尾在日志文件末尾持續(xù)添加記錄rb,wb,ab同上但針對(duì)二進(jìn)制文件同上同上讀寫圖片、結(jié)構(gòu)體數(shù)據(jù)等r讀寫文本出錯(cuò)返回NULL打開文件指針在開頭需要同時(shí)讀寫的文本文件編輯w讀寫文本創(chuàng)建新文件清空原文件內(nèi)容創(chuàng)建并讀寫一個(gè)新的文本文件a讀寫文本創(chuàng)建新文件打開文件指針在末尾寫可讀全部讀寫日志文件可讀歷史追加新內(nèi)容rb,wb,ab同上但針對(duì)二進(jìn)制文件同上同上需要同時(shí)讀寫的二進(jìn)制文件實(shí)操心得w和w模式會(huì)清空已有文件這是我早期踩過(guò)的大坑。本來(lái)想打開一個(gè)文件修改幾個(gè)數(shù)據(jù)用了w瞬間文件就空了。如果不想丟失原內(nèi)容需要追加就用a需要讀寫且保留原內(nèi)容就用r。3. 核心函數(shù)庫(kù)深度解析與實(shí)戰(zhàn)C標(biāo)準(zhǔn)庫(kù)stdio.h提供了一套豐富的文件操作函數(shù)。我們將其分為文本操作和二進(jìn)制操作兩大陣營(yíng)來(lái)講解。3.1 文本文件操作函數(shù)組這組函數(shù)處理的是字符流適合人類可讀的數(shù)據(jù)。1.fopen/fclose 善始必須善終任何文件操作都必須以fopen開始以fclose結(jié)束。這是鐵律。FILE *fopen(const char *filename, const char *mode); int fclose(FILE *stream);fopen 第一個(gè)參數(shù)是文件路徑相對(duì)或絕對(duì)第二個(gè)是上表提到的模式字符串。務(wù)必檢查返回值FILE *fp fopen(data.txt, r); if (fp NULL) { perror(Failed to open file); // perror會(huì)打印詳細(xì)的錯(cuò)誤信息 // 或者 printf(Error: %s\n, strerror(errno)); return 1; }perror或strerror(errno)能告訴你具體錯(cuò)誤原因如文件不存在、無(wú)權(quán)限等這對(duì)調(diào)試至關(guān)重要。fclose 不僅關(guān)閉文件更重要的是刷新緩沖區(qū)。操作系統(tǒng)為了效率并不會(huì)每次fprintf都立即寫盤而是先放在內(nèi)存緩沖區(qū)。fclose會(huì)確保所有緩沖數(shù)據(jù)都寫入磁盤。忘記關(guān)閉文件可能導(dǎo)致數(shù)據(jù)丟失在長(zhǎng)時(shí)間運(yùn)行的程序中還會(huì)造成“文件描述符泄漏”耗盡系統(tǒng)資源。2.fprintf/fscanf 格式化的讀寫利器它們就像是針對(duì)文件的printf和scanf用法幾乎一樣。int fprintf(FILE *stream, const char *format, ...); int fscanf(FILE *stream, const char *format, ...);fprintf 將格式化后的字符串寫入文件。fprintf(fp, Name: %s, Age: %d, Score: %.2f\n, name, age, score);fscanf 從文件中按照格式讀取數(shù)據(jù)。但它很脆弱它根據(jù)空白字符空格、換行、制表符來(lái)分割數(shù)據(jù)。如果文件格式和你的格式字符串不嚴(yán)格匹配讀取就會(huì)錯(cuò)位或失敗。// 假設(shè)文件內(nèi)容為John 25 95.5 while (fscanf(fp, %s %d %f, name, age, score) 3) { // 成功讀取一條記錄 }注意事項(xiàng)fscanf遇到不符合預(yù)期的輸入比如期望數(shù)字卻讀到字母會(huì)直接失敗并返回且文件指針會(huì)停留在出錯(cuò)的位置后續(xù)讀取全亂。對(duì)于格式不規(guī)整的文件建議用fgets讀整行再用sscanf或字符串函數(shù)解析這樣容錯(cuò)性更強(qiáng)。3.fgets/fputs 行處理的黃金搭檔如果你要處理的是以行為單位的文本如配置文件、日志這組函數(shù)更安全、更常用。char *fgets(char *str, int n, FILE *stream); int fputs(const char *str, FILE *stream);fgets 從文件中讀取一行直到遇到換行符\n或文件結(jié)束并在字符串末尾自動(dòng)添加\0。第二個(gè)參數(shù)n是緩沖區(qū)大小它會(huì)最多讀取n-1個(gè)字符防止緩沖區(qū)溢出安全性遠(yuǎn)高于古老的gets。char buffer[256]; while (fgets(buffer, sizeof(buffer), fp) ! NULL) { // buffer中現(xiàn)在有一行內(nèi)容包括換行符如果該行長(zhǎng)度小于緩沖區(qū) // 通常我們會(huì)去掉末尾的換行符 buffer[strcspn(buffer, \n)] \0; printf(Line: %s\n, buffer); }fputs 將一個(gè)字符串寫入文件不會(huì)自動(dòng)添加換行符。如果需要換行你得自己在字符串里加上\n。fputs(Hello, World!\n, fp);3.2 二進(jìn)制文件操作函數(shù)組這組函數(shù)直接操作內(nèi)存塊效率高適合保存程序狀態(tài)、復(fù)雜數(shù)據(jù)結(jié)構(gòu)。1.fwrite/fread 內(nèi)存與文件的直接搬運(yùn)這是二進(jìn)制文件操作的核心其操作單位是“對(duì)象”的個(gè)數(shù)和大小。size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream); size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);參數(shù)解析ptr 指向你要寫入/讀取的數(shù)據(jù)的內(nèi)存起始地址。size 每個(gè)數(shù)據(jù)項(xiàng)的大小字節(jié)。sizeof(運(yùn)算符)是你的好朋友。nmemb 你想要寫入/讀取的數(shù)據(jù)項(xiàng)個(gè)數(shù)。stream 文件指針。返回值 成功寫入/讀取的數(shù)據(jù)項(xiàng)個(gè)數(shù)nmemb而非字節(jié)數(shù)。如果返回值小于nmemb可能發(fā)生了錯(cuò)誤或到達(dá)文件尾對(duì)于fread。經(jīng)典應(yīng)用保存/加載結(jié)構(gòu)體數(shù)組typedef struct { int id; char name[50]; float salary; } Employee; Employee staff[100]; int count 50; // 假設(shè)有50個(gè)員工 // 寫入到文件 FILE *fp fopen(staff.dat, wb); if (fp) { size_t written fwrite(staff, sizeof(Employee), count, fp); if (written ! count) { // 處理寫入不完全的情況 } fclose(fp); } // 從文件讀取 fp fopen(staff.dat, rb); if (fp) { // 先獲取文件大小計(jì)算有多少個(gè)結(jié)構(gòu)體 fseek(fp, 0, SEEK_END); long file_size ftell(fp); int num_records file_size / sizeof(Employee); rewind(fp); // 指針回到文件頭 Employee *read_staff malloc(file_size); size_t read fread(read_staff, sizeof(Employee), num_records, fp); fclose(fp); // 使用 read_staff... free(read_staff); }核心技巧 用fseek和ftell獲取二進(jìn)制文件大小是計(jì)算記錄數(shù)量的常用方法。但要注意如果文件不是由你程序以固定大小記錄寫入的這種方法可能不準(zhǔn)。2.fseek/ftell/rewind 掌控文件指針的“遙控器”文件內(nèi)部有一個(gè)“當(dāng)前位置”指針指示下一次讀寫操作發(fā)生的地方。我們可以移動(dòng)它實(shí)現(xiàn)隨機(jī)訪問(wèn)。int fseek(FILE *stream, long offset, int whence); long ftell(FILE *stream); void rewind(FILE *stream);fseek 移動(dòng)指針。offset 偏移量字節(jié)。可為正向后移或負(fù)向前移。whence 基準(zhǔn)位置。SEEK_SET文件開頭SEEK_CUR當(dāng)前位置SEEK_END文件末尾。示例fseek(fp, sizeof(Employee) * 10, SEEK_SET);將指針移動(dòng)到第11個(gè)結(jié)構(gòu)體的開頭從0開始計(jì)數(shù)。ftell 返回指針當(dāng)前位置相對(duì)于文件開頭的偏移量字節(jié)數(shù)。常用于獲取文件大小。rewind 等價(jià)于fseek(fp, 0, SEEK_SET);將指針重置到文件開頭。重要警告 對(duì)于文本模式打開的文件fseek和ftell的行為可能與二進(jìn)制模式不同因?yàn)榇嬖趽Q行符轉(zhuǎn)換且offset的值最好只使用0配合SEEK_SET或SEEK_END或由ftell返回的值。對(duì)于隨機(jī)訪問(wèn)強(qiáng)烈建議始終使用二進(jìn)制模式”rb”,”wb”等。4. 綜合實(shí)戰(zhàn)一個(gè)簡(jiǎn)易學(xué)生成績(jī)管理系統(tǒng)理論說(shuō)再多不如動(dòng)手寫一個(gè)。我們來(lái)設(shè)計(jì)一個(gè)能持久化存儲(chǔ)學(xué)生信息的小系統(tǒng)。4.1 數(shù)據(jù)結(jié)構(gòu)與菜單設(shè)計(jì)#include stdio.h #include stdlib.h #include string.h #define MAX_NAME_LEN 50 #define FILENAME students.dat typedef struct { int id; // 學(xué)號(hào) char name[MAX_NAME_LEN]; float score; } Student; void print_menu() { printf(\n 學(xué)生成績(jī)管理系統(tǒng) \n); printf(1. 添加學(xué)生\n); printf(2. 顯示所有學(xué)生\n); printf(3. 按學(xué)號(hào)查找學(xué)生\n); printf(4. 按學(xué)號(hào)刪除學(xué)生\n); printf(5. 保存數(shù)據(jù)到文件\n); printf(6. 從文件加載數(shù)據(jù)\n); printf(0. 退出\n); printf(請(qǐng)選擇: ); }4.2 核心功能實(shí)現(xiàn)添加、顯示與查找我們用一個(gè)動(dòng)態(tài)數(shù)組來(lái)管理內(nèi)存中的數(shù)據(jù)。Student *student_list NULL; int student_count 0; int capacity 0; void add_student() { if (student_count capacity) { // 動(dòng)態(tài)擴(kuò)容 capacity (capacity 0) ? 4 : capacity * 2; Student *new_list realloc(student_list, capacity * sizeof(Student)); if (!new_list) { printf(內(nèi)存分配失敗\n); return; } student_list new_list; } Student *s student_list[student_count]; printf(請(qǐng)輸入學(xué)號(hào): ); scanf(%d, s-id); getchar(); // 吸收回車鍵 printf(請(qǐng)輸入姓名: ); fgets(s-name, MAX_NAME_LEN, stdin); s-name[strcspn(s-name, \n)] \0; // 去掉換行符 printf(請(qǐng)輸入成績(jī): ); scanf(%f, s-score); student_count; printf(添加成功\n); } void display_all() { if (student_count 0) { printf(當(dāng)前沒(méi)有學(xué)生記錄。\n); return; } printf(學(xué)號(hào)\t姓名\t\t成績(jī)\n); printf(----\t----\t\t----\n); for (int i 0; i student_count; i) { printf(%d\t%s\t\t%.1f\n, student_list[i].id, student_list[i].name, student_list[i].score); } } int find_by_id(int id) { for (int i 0; i student_count; i) { if (student_list[i].id id) { return i; // 返回?cái)?shù)組下標(biāo) } } return -1; // 未找到 }4.3 文件持久化保存與加載這是文件操作的核心體現(xiàn)。void save_to_file() { FILE *fp fopen(FILENAME, wb); // 二進(jìn)制寫模式 if (!fp) { perror(保存文件失敗); return; } // 先寫入記錄數(shù)量方便讀取時(shí)分配內(nèi)存 fwrite(student_count, sizeof(int), 1, fp); // 再寫入所有學(xué)生數(shù)據(jù) size_t written fwrite(student_list, sizeof(Student), student_count, fp); if (written student_count) { printf(成功保存 %d 條記錄到文件 %s\n, student_count, FILENAME); } else { printf(保存文件時(shí)發(fā)生寫入錯(cuò)誤。\n); } fclose(fp); } void load_from_file() { FILE *fp fopen(FILENAME, rb); if (!fp) { // 文件可能不存在第一次運(yùn)行 printf(未找到數(shù)據(jù)文件或文件為空。\n); return; } // 先讀取記錄數(shù)量 int count_from_file; if (fread(count_from_file, sizeof(int), 1, fp) ! 1) { printf(讀取文件頭信息失敗。\n); fclose(fp); return; } if (count_from_file 0) { printf(文件記錄數(shù)為0。\n); fclose(fp); return; } // 釋放舊內(nèi)存分配新內(nèi)存 free(student_list); student_list malloc(count_from_file * sizeof(Student)); if (!student_list) { printf(內(nèi)存分配失敗無(wú)法加載數(shù)據(jù)。\n); fclose(fp); student_count 0; capacity 0; return; } // 讀取學(xué)生數(shù)據(jù) size_t read fread(student_list, sizeof(Student), count_from_file, fp); fclose(fp); if (read count_from_file) { student_count count_from_file; capacity count_from_file; // 加載后容量等于數(shù)量 printf(成功從文件加載 %d 條記錄。\n, student_count); } else { printf(讀取學(xué)生數(shù)據(jù)時(shí)發(fā)生錯(cuò)誤數(shù)據(jù)可能已損壞。\n); free(student_list); student_list NULL; student_count capacity 0; } }設(shè)計(jì)思路解析 為什么要在文件開頭先保存一個(gè)int型的記錄數(shù)量這是一種常見的“文件頭”設(shè)計(jì)。如果不保存數(shù)量讀取時(shí)你就不知道后面有多少條Student記錄。雖然可以通過(guò)fseek到文件尾求總大小再除以sizeof(Student)來(lái)計(jì)算但這種方法要求文件內(nèi)容必須完全由完整的Student記錄構(gòu)成不能有任何其他字節(jié)。先寫入數(shù)量更安全、更清晰。這是一種簡(jiǎn)單的序列化方案。4.4 刪除功能與主循環(huán)void delete_by_id() { int id, index; printf(請(qǐng)輸入要?jiǎng)h除的學(xué)號(hào): ); scanf(%d, id); index find_by_id(id); if (index -1) { printf(未找到學(xué)號(hào)為 %d 的學(xué)生。\n, id); return; } // 將最后一個(gè)元素覆蓋到要?jiǎng)h除的位置 student_list[index] student_list[student_count - 1]; student_count--; printf(刪除成功\n); } int main() { int choice; load_from_file(); // 程序啟動(dòng)時(shí)自動(dòng)加載數(shù)據(jù) do { print_menu(); scanf(%d, choice); getchar(); // 吸收菜單選擇后的回車 switch (choice) { case 1: add_student(); break; case 2: display_all(); break; case 3: { int id, idx; printf(請(qǐng)輸入要查找的學(xué)號(hào): ); scanf(%d, id); idx find_by_id(id); if (idx ! -1) { printf(找到學(xué)生: 學(xué)號(hào):%d, 姓名:%s, 成績(jī):%.1f\n, student_list[idx].id, student_list[idx].name, student_list[idx].score); } else { printf(未找到該學(xué)生。\n); } break; } case 4: delete_by_id(); break; case 5: save_to_file(); break; case 6: load_from_file(); break; case 0: save_to_file(); // 退出前自動(dòng)保存 printf(數(shù)據(jù)已保存程序退出。\n); break; default: printf(無(wú)效選擇請(qǐng)重新輸入。\n); } } while (choice ! 0); free(student_list); // 釋放動(dòng)態(tài)內(nèi)存 return 0; }這個(gè)案例麻雀雖小五臟俱全。它涵蓋了動(dòng)態(tài)內(nèi)存管理、結(jié)構(gòu)體使用、二進(jìn)制文件讀寫fwrite/fread、錯(cuò)誤檢查、簡(jiǎn)單的用戶交互。你可以運(yùn)行它添加幾個(gè)學(xué)生保存退出再重新運(yùn)行程序會(huì)發(fā)現(xiàn)數(shù)據(jù)被成功加載回來(lái)。這就是文件持久化的魅力。5. 高級(jí)話題與性能優(yōu)化當(dāng)你掌握了基礎(chǔ)操作后下面這些點(diǎn)能讓你寫出更健壯、更高效的程序。5.1 錯(cuò)誤處理的藝術(shù)文件操作處處可能出錯(cuò)打開失敗、讀寫不完全、空間不足。健壯的程序必須處理這些錯(cuò)誤。檢查每一個(gè)可能失敗的函數(shù)返回值fopen,fclose,fread,fwrite,fscanf,fseek等都有返回值。忽略它們等于埋下地雷。使用feof和ferrorint feof(FILE *stream);用于判斷是否到達(dá)文件末尾。注意它是在嘗試讀取失敗后才返回真。常見的錯(cuò)誤用法是在循環(huán)中用while(!feof(fp))這會(huì)導(dǎo)致最后一次多讀。正確的做法是檢查fread/fgets等讀函數(shù)的返回值。int ferror(FILE *stream);用于檢查文件流是否發(fā)生了錯(cuò)誤。清晰的錯(cuò)誤信息 結(jié)合perror或strerror(errno)告訴用戶或開發(fā)者到底出了什么問(wèn)題。FILE *fp fopen(important.dat, rb); if (!fp) { // 不好的做法 printf(打開文件失敗\n); // 好的做法 perror(無(wú)法打開文件 important.dat); // 輸出無(wú)法打開文件 important.dat: No such file or directory return; } // 讀取時(shí)的錯(cuò)誤檢查 size_t items_read fread(buffer, size, count, fp); if (items_read count) { if (feof(fp)) { printf(已到達(dá)文件末尾。\n); } else if (ferror(fp)) { perror(讀取文件時(shí)發(fā)生錯(cuò)誤); } // 處理不完整讀取的情況 }5.2 緩沖區(qū)的秘密與fflush前面提到為了效率標(biāo)準(zhǔn)I/O庫(kù)使用了緩沖區(qū)。這帶來(lái)了性能提升但也可能引起困惑。行緩沖 vs 全緩沖 通常標(biāo)準(zhǔn)輸出stdout連接到終端時(shí)是行緩沖的遇到\n才刷新而寫入到文件時(shí)是全緩沖的緩沖區(qū)滿或文件關(guān)閉時(shí)才刷新。這就是為什么有時(shí)printf的信息沒(méi)有立即顯示在屏幕上而寫入文件的數(shù)據(jù)在fclose前可能看不到。int fflush(FILE *stream); 手動(dòng)刷新緩沖區(qū)。對(duì)于輸出流fflush將緩沖區(qū)內(nèi)容立即寫入文件或設(shè)備。對(duì)于輸入流其行為是未定義的有些實(shí)現(xiàn)會(huì)清空輸入緩沖區(qū)。典型用途1 在需要立即將日志寫入文件而不想關(guān)閉文件時(shí)。fprintf(log_fp, [ERROR] Something went wrong.\n); fflush(log_fp); // 確保這條日志立刻落盤即使程序接下來(lái)崩潰典型用途2 在要求用戶輸入前清空標(biāo)準(zhǔn)輸出緩沖區(qū)確保提示信息顯示出來(lái)。printf(請(qǐng)輸入你的選擇回車確認(rèn): ); fflush(stdout); // 確保提示語(yǔ)先顯示出來(lái) fgets(input, sizeof(input), stdin);5.3 性能考量何時(shí)用二進(jìn)制何時(shí)用文本二進(jìn)制文件的優(yōu)勢(shì)空間效率 存儲(chǔ)緊湊。一個(gè)int在內(nèi)存中占4字節(jié)寫入二進(jìn)制文件就是4字節(jié)。寫成文本”12345″需要5-6個(gè)字節(jié)加換行符。讀寫速度 直接內(nèi)存拷貝沒(méi)有格式解析如fscanf需要分析字符串并轉(zhuǎn)換為數(shù)字的開銷速度快。精度 對(duì)于浮點(diǎn)數(shù)二進(jìn)制存儲(chǔ)能保持完整的精度而文本格式轉(zhuǎn)換%f可能會(huì)有精度損失。文本文件的優(yōu)勢(shì)可讀性與可移植性 人類可直接查看和編輯不同系統(tǒng)、不同編程語(yǔ)言之間交換數(shù)據(jù)方便如CSV、JSON文件本質(zhì)是文本。兼容性 不受內(nèi)存對(duì)齊、字節(jié)序大端/小端的影響。一個(gè)在x86機(jī)器上生成的文本文件在ARM機(jī)器上照樣能讀。易于調(diào)試 數(shù)據(jù)錯(cuò)了打開文件一看就知道。選擇建議需要快速保存/恢復(fù)程序內(nèi)部復(fù)雜狀態(tài)如游戲存檔、大型結(jié)構(gòu)體數(shù)組 -用二進(jìn)制。需要生成給人看、給人改的配置文件、報(bào)告、日志 -用文本。需要在不同平臺(tái)、不同語(yǔ)言間交換數(shù)據(jù) -優(yōu)先考慮文本格式如JSON, XML, CSV除非對(duì)性能和體積有極端要求。6. 常見“坑點(diǎn)”與調(diào)試技巧實(shí)錄這里記錄了我自己和很多初學(xué)者常犯的錯(cuò)誤以及解決辦法。6.1 路徑問(wèn)題文件到底在哪// 假設(shè)你的程序叫 demo.exe在 D:\projects 下 FILE *fp fopen(data.txt, r); // 它會(huì)嘗試在 D:\projects\data.txt 尋找 FILE *fp2 fopen(..\\config\\settings.ini, r); // 向上級(jí)目錄再進(jìn)入config文件夾 FILE *fp3 fopen(C:\\Users\\Name\\Documents\\file.dat, rb); // 絕對(duì)路徑相對(duì)路徑 相對(duì)于程序當(dāng)前工作目錄Current Working Directory。這個(gè)目錄不一定是.exe所在目錄在IDE中運(yùn)行工作目錄常是項(xiàng)目文件夾雙擊運(yùn)行工作目錄是.exe所在目錄。這是路徑錯(cuò)誤最常見的原因。調(diào)試方法 在程序開頭用getcwdWindows下_getcwd打印當(dāng)前工作目錄?;蛘咴诖蜷_文件失敗時(shí)將嘗試的完整路徑打印出來(lái)。6.2 模式混淆與數(shù)據(jù)清空這是血淚教訓(xùn)的重災(zāi)區(qū)。誤用”w”模式 本想打開一個(gè)已有文件修改某處結(jié)果一用”w”文件瞬間清零。記住”w”意味著“創(chuàng)建或截?cái)唷?。文?二進(jìn)制模式混用 用”r”文本打開一個(gè)由fwrite寫入的.dat文件讀取會(huì)錯(cuò)亂。用”rb”打開一個(gè)文本文件fgets可能讀不到完整的行因?yàn)閾Q行符沒(méi)被轉(zhuǎn)換。fscanf的陷阱fscanf(fp, “%d”, num);如果文件當(dāng)前位置是字母讀取會(huì)失敗但文件指針不動(dòng)下次還是讀這個(gè)字母陷入死循環(huán)。永遠(yuǎn)要用返回值檢查fscanf的成功項(xiàng)數(shù)并在失敗時(shí)清空輸入緩沖區(qū)或調(diào)整文件指針。6.3 文件指針越界與狀態(tài)混亂讀寫切換必須fseek或fflush 在一個(gè)用”r”打開的文件上讀完一些數(shù)據(jù)后想緊接著寫必須調(diào)用fseek(fp, 0, SEEK_CUR);來(lái)重置讀寫狀態(tài)或者調(diào)用fflush。標(biāo)準(zhǔn)規(guī)定讀寫操作之間需要一次定位函數(shù)調(diào)用。ftell在文本模式下的值不可靠 如前所述文本模式下ftell返回的值可能不是真正的字節(jié)偏移量不要用它來(lái)做精確計(jì)算。6.4 內(nèi)存與文件內(nèi)容的對(duì)應(yīng)關(guān)系用fwrite寫結(jié)構(gòu)體時(shí)你寫的是內(nèi)存的二進(jìn)制映像。這意味著結(jié)構(gòu)體中的“空洞” 由于內(nèi)存對(duì)齊結(jié)構(gòu)體可能有填充字節(jié)這些也會(huì)被寫入文件。兩個(gè)編譯器設(shè)置不同的程序可能生成內(nèi)存布局不同的結(jié)構(gòu)體導(dǎo)致互不兼容。指針問(wèn)題絕對(duì)不要fwrite一個(gè)包含指針的結(jié)構(gòu)體你寫入的是指針變量的值一個(gè)內(nèi)存地址下次程序運(yùn)行時(shí)這個(gè)地址毫無(wú)意義。你需要序列化指針?biāo)赶虻臄?shù)據(jù)。字符串長(zhǎng)度 如果結(jié)構(gòu)體里有char name[50];你總是寫入50字節(jié)。即使名字只有”Tom”后面多余的字節(jié)可能是亂碼也會(huì)被寫入。讀取時(shí)也要準(zhǔn)備50字節(jié)的空間。6.5 文件打開數(shù)量限制與資源泄漏每個(gè)進(jìn)程能同時(shí)打開的文件數(shù)量是有限的通過(guò)ulimit -n可以查看。如果你在循環(huán)中不斷fopen而不fclose很快就會(huì)達(dá)到上限導(dǎo)致后續(xù)的fopen失敗。務(wù)必配對(duì) 每個(gè)成功的fopen都必須對(duì)應(yīng)一個(gè)fclose。使用atexit注冊(cè)清理函數(shù) 對(duì)于全局性的重要文件指針可以注冊(cè)一個(gè)在程序退出時(shí)自動(dòng)關(guān)閉的函數(shù)防止因異常退出導(dǎo)致數(shù)據(jù)丟失。FILE *global_log_fp NULL; void cleanup_log() { if (global_log_fp) { fclose(global_log_fp); global_log_fp NULL; } } int main() { global_log_fp fopen(app.log, a); atexit(cleanup_log); // 注冊(cè)清理函數(shù) // ... 程序邏輯 // 即使程序崩潰或調(diào)用exit()cleanup_log也會(huì)被執(zhí)行 return 0; }掌握C語(yǔ)言文件操作就像是給你的程序裝上了數(shù)據(jù)的“手”和“腳”。從簡(jiǎn)單的文本配置讀寫到復(fù)雜的二進(jìn)制數(shù)據(jù)持久化這套機(jī)制是構(gòu)建實(shí)用軟件的基石。我個(gè)人的體會(huì)是初期多踩坑是好事把上面提到的每個(gè)“坑點(diǎn)”都親手實(shí)踐一遍印象會(huì)無(wú)比深刻。最好的學(xué)習(xí)方法就是像我們上面那樣動(dòng)手寫一個(gè)完整的、帶持久化功能的小項(xiàng)目。在調(diào)試它、完善它的過(guò)程中你會(huì)遇到各種問(wèn)題而解決這些問(wèn)題的過(guò)程就是真正掌握這門技術(shù)的時(shí)刻。最后一個(gè)小技巧在處理重要數(shù)據(jù)前先對(duì)文件進(jìn)行備份或者在一個(gè)臨時(shí)文件上操作成功后再替換原文件這是一個(gè)保證數(shù)據(jù)安全的好習(xí)慣。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
久久视频,这里只有精品| 一区| 日韩免费人妻色情网站| 欧亚性爱视频免费看| 午夜男人的天堂| 国产肏逼网站| 日韩中文字幕国产| 国产精品 久久久精品一牛| 欧美一区二区福利在线| 欧美成人性爱视频大全| 色91综合网| 久久高清无码夜夜操| 欧洲乱码视频| 亚洲精品99999| 无码国产精品96久久久久孕妇| 无码外流操逼视频| 久久国产视频性吧 | 国产高清成人免费视频| 色婷婷国产精品一区在线观看| 国产AV激情无码久久无码 | 99热只有这里有精品| 91色综合激情| 97超碰超碰| 五月婷婷影院| 男人久久天堂| 黄色AV免费| 秋霞视频一区二区| 欧美色蜜桃97| 人妻精品综合中文字幕在线 | 女人与公拘交酡2020视频| 日本超碰在线国产一区| 五月天我淫我色av| 日本一二三高清| 黄片免费久久久久久久| 熟女熟妇一区二区三区视频| 激情综合五| 日本韩国五十路六十路七十路老熟女作爱视频网站 | 蜜臀AV一区二区三区激情综合| 国内精品久久久久影院亚洲| 亚州成人a∨| 中文字幕蜜乳av| 天天做天天爱夜夜爽毛片试看| 明星性猛交ⅹxxx乱大交| 十八禁网站在线| 国产探花日韩援交| 日本午夜操逼| 亚射在线| 秋霞无码av鲁丝片一区| 夜夜骑夜夜操| rivers-china.com| ai欧美亚洲小说| 99色天堂| 久久人妻无码毛片A片麻豆| 一级久久久久久久久久久 | 草伊人高潮喷水超碰| 国产女人与拘做受视频免费| 亚洲欧洲日产国产综合网| 乱伦日本色图AⅤ| 久久大黄片| 男人的天堂日韩| 二色av| 精品日韩人妻视频| 欧美日韩色| 97在线看| 亚洲国产精品久久久久婷婷青年| 久热色情精品| 亚洲自拍欧美色综合| 国产精品乱人伊人网| 999亚洲国产视频| 国产精品久久久亚洲一区| 超碰97人人cao| 60秒免费视频| 亚洲综合影院| 久久精品欧美一区蜜桃| 大香网站| caoni国产亚洲av| 亚洲日韩资源| 亚洲污污网站| 亚洲www91| 欧美 综合 亚洲| 欧美综合色图网| 久久久久久久久久久999| 亚欧性爱无码| 变态乱伦伪娘灌肠一区二区| 国产高清精品福利| 色婷五月| 欧美性爱视频免费一区一A | 麻豆AV96熟妇人妻| 成人精品一区二区三区| 欧美色图小说综合| 极品色综合| 欧美性爱视频免费一区一A| 亚洲aV性爱| 亚洲色图久久成人| 日1区2区3区2020| 国产路线专区| 人人爱人人操人人性| 色蜜AV| 超碰碰97| 人妻精品一区一区三区蜜桃91| 色色99| 欧美大色交| 天天欧美欧美亚洲网| 久久亚洲一区女同性恋中文字幕| 国产探花日韩援交| 96久久精品一二三区色欲| 性爱视频啪啪啪啪| 老熟女熟妇| 国产精品69人妻无码久久久| 欧美性爱另类综合| 日韩av一级黄片| 男人的天堂一区三区| 精品视频免费在线一区| 午夜男女爽爽爽影院视频| 亚洲欧美日韩不卡人妻| 日韩三级一区| 婷婷色综合欧美日韩| 日韩免费簧片| 亚洲成av人片色午夜乱码| 欧美大香蕉97| 99热这里只有精| 亚洲爽图| 狠狠热这里都是精品| 色爱综合网| 黄色AAAAA欧美| 九月伊人中文字幕| 中文字幕激情小说| 神马久久久久眼| 亚洲操人| 日韩不卡a级视频专区| 乱伦一区二区三区‘| 操逼网站网站| 免费人成在线观看网站品爱网| 黄色一区三区| 91亚洲黄色网| 青青操日韩| 激情情色五月天| 久久精品无码熟妇一区二区三区视频导航| 男人下部插入女人下部| 天堂av2019| 中文字幕一区二区三区人妻少妇在线| 久久鲁夜| 国产精品第一页国产大屁股视频免费区i| 精品九九九九九九九九九| 久偷拍欧美日韩三区| 久久久精久久久| 亚洲成人贴图| 蜜臀久久99精品久久久电影| 成人麻豆av电影网站| 欧 美 自 拍 偷 拍| 亚洲综合97| 蘋果手機免費看成人Av| 老鸭窝在线视频播放| 蜜桃视频啊啊啊啊| 青青草大香蕉视频| 综合色播| 国产精品高清2021在线| 一类av片在线看| 国内毛片婷婷六月色| 亚洲欧美综合区自拍另类| 欧美韩日精品资源| 久久精品国产亚洲5555| 午夜无码精品免费看性色| 91 国产丝袜在线播放-百度| 中文久久| 国产一区在线观看无码AV| 美欧色综合| 爱逼综合| 日韩乱码Av| 高潮毛片无遮挡高清免费| 91天堂| 97视频免费播放| 青青草吊丝| 91色久| 麻花豆传媒剧国产MV出差| 天天看天天日天天操| 26uuu最新| 精品无码久久久久久国产浪潮| 中文字幕av亚洲精品| 91性网| 丁香六月激情| 精品欧美А∨无码黑人大荫蒂 | 一摸二插三插| 日韩天天本| 免费视频一二三区| 人人操人人爽人人操人人| 熟女激情综合网| 午夜视频久久久久一区| · —级AA伦aa坐爱午夜极速ⅴA一区天天噪天天噪天天噪 | 欧美成人性活片| 黑人性暴力毛片| 夜色91| 亚洲人天堂| 影视综合无码少妇| 1956日韩精品| 色悠久久久av| 狠狠婷婷亚洲中文综合久久| 涩爱AV在线| 人妻喷水| 欧美亚洲丝袜美女电影| 人妻少妇蜜桃视频欧美一区| 热热热热日日漂亮永久永久国产日| 色情五月婷婷| 国产精品com| 少妇的嫩逼图片| 亚洲射综合网| 亚洲综合射| 一区操逼| 久操在97| se吧提供91精品国产91久久久久久| 97超碰中文在线| 久久久久亚洲精品| 97K超碰在线| 太久视频| 东京热精品97综合网| Julia Annxxxxx| 操B视频日韩无码| 亚洲AV无线| 强奸乱伦免费网站| 伊人久久婷婷| 欧美狠狠弄| 国产高清视频无码在线| 亚洲中文字幕乱码无码一区二区 | 立川理惠无码一区二区| 日韩亚洲97| 国产三级电影免费观看| 精品白丝一区| 思思热在线cao| 性高潮久久久| 色呦色呦色精品| 成人精品在线观看| 后入日本1234| 精品 码产区一区二-1080P高清在线www-B029AV | 97欧美视频| 久久人妻丝袜一区二区三| 密臀成人视频久久久| 天天色播| 99婷婷一区二区| 九九性爱网| 99久久久久久亚洲精品不卡| 国产树林里野战在线看| 色欲Av人妻精品一区二| 伊人大香蕉在线| 上海一级黄片| 夜夜高潮夜夜爽夜夜爱爱一区 | A片 AV一级在线播放观看免费| 超碰97网址| 91丨熟女丨丰满熟女| 一本色道综合久久欧美| 国产又粗又长视频| 久超碰这里只有精品| 亚洲日韩AV视色| 无码高清操逼网址| 男人的天堂VA| 久久精品无码专区| 久久人妻| 国产精品黑人一区二区三区| 亚洲欧美综合| 国产精品永久免费10000| 美女裸体无遮挡永久免费观看网站| 天天综合网视频91| 91白嫩| 日本三级精品| 香蕉人欧美综合| 国产精品成人AV片免费看网站| 亚洲激情片| 亚洲蜜臀精品视频久久| 91精品婷婷国产综合久久竹菊| 东京热一区二区三区四区五区六区| 日韩欧美视频青青| 女人妻一区| 色色99| 物业黑人 AV一区| 国产AV天美| 亚州中文字幕超碰97| 色www精品视频在线观看| 久久久111| 亚州中文字幕超碰97| 欧美 亚洲 大香| 日本色婷婷| 刺激性视频黄页| 91五十路| 激情小说日韩无码| 亚洲一级特黄大片在线播放91| 久热热| 亚洲综合另类欧美久久久| 天天看少妇| 成人美女av| 亚洲 图片 综合91| 人妻素股| 欧美精品三区| 天天综合网亚洲综合网| 超碰无码加勒比| 九月婷婷综合| wuyechaopeng| 亚洲AV无码翔田千里网站| 亚洲精品天堂久久A∨51成人漫| 亚洲精品性爱片| 亚洲国产一区二区入口| 超碰午夜| 日本东京热大香蕉a片| 99ri精品| 蜜乳视频网站| 天天做天天爱天天爽AV| 亚洲Av噜噜一区二区三区妖精| 欧美爱三级日韩久久| 乱人乱色一区二区三区免费| av一区二区三区 中文| 久久久亚洲Av| 日韩综合无码色欲vv| 99精品久久| 久久精品人人做人人看| 97超碰色| 日本在线观看网址| 一区二区三区一亚洲中文字幕、综合区灬 | 欧美色蜜桃97| 狠色婷婷久久一区二区三区_| 丰满搜索结果 -第18页- 久久高清无码| 96AV精品| 欧美在线55555| 日韩啪啪啪视频| 激情四射五月天| 国产又黄又猛又粗又爽的网站| 99丝袜福利在线播放| 激激五月| 免费成人在线熟妇网| 中文字幕超碰CAO| 上床不卡网站| 999久久芭蕾| 欧美性爱一区二区三区四区| 麻豆婷婷成人一二三| 北野未奈加勒比av| 久久婷婷成人综合色怡春院| 免费av在线播放二区| 日本不卡一区二区| 岛国激情视频在线观看| 伊人黄色视频免费观看| 97激情97激情| K8久久久久| 人妻日日干| 97在线欧| 久久久久久波多野吉衣高潮| 精品四五区| 蜜臀久久99精品久久久久久成人小说| av网站免费看| 老司机老司机午夜影院| 五月婷丁香| 99爱久久视频频| 欧美亚洲se91| 欧美日韩1234| 亚洲最大AV网| 日产国产精品中文久久婷婷| 后入式999| 69久久| 日韩欧美性吧婷婷乱伦大香蕉| 日韩av电影成人在线| 干婷婷综合网| 天堂麻豆天美| 欧美97av| 国产91亚洲精品一区二区三区| 日本高清_区二区三区| 性爱综合网| 91l欧美在线| 久午视频| 亚洲天堂 视频你懂的| 秋霞蝌科网日本一区| 中文字幕啊啊啊在线观看视频| 亚洲精品国产av天美传媒| 国产综合久久久麻桃个| 欧美中出1| 天天看特黄的免费网站 | 综合亚洲欧美| 午夜福利一区二区影院| 美女被艹尤物视频| 色综合99999| 一区二区激情国产熟女| 色欲蜜臀AV| 伊人青青一区成人视频在线观看区| 96久久久精品| 高清无码一区二区三区| 伊人五月天青青草婷婷| 国产精品一区二区三区免费视频| 亚洲AV成人无码一二三久久| 亚洲一本大道中文字幕无码在线| 伊人丝袜美腿高跟在线观看高清| 91综合在线| 五月天激情影院| 人妻天天操天天爽视频免费| 亚洲性爱高潮影院| 亚洲欧美精品91| 中文字幕国产| 亚洲欧美日韩精品久| 精品9区| 国产女同视频在线播放| 九九热超碰97亚洲最新香蕉| 精品无人区麻豆乱码1区2区图片 | 九九综合九九综合| 囯产精品一区二区三区线|亚洲人成无码网WWW动漫|国产精品免费一级... | 人人搞人人插人人操| 中文自拍欧美影视| 香蕉av一区二区三区| 精品久久久久久中文字幕三区| 超碰爽人妻熟女Av| 人妻欧美| 蜜乳性色无码专日粉嫩骚逼AV| 任你干在线视频| 91午夜无码| 日韩中文字幕2020| 操逼1区| 麻豆天美在线喷水AV| 亚洲国产尤物yw在线观看| 国产欧美日韩臀| AV和黑人在线播放| 五月天久久久| 偷拍99| 日韩 欧美 另类 人妻| 精品中文日韩字幕视频| 少妇综合网| 人妻美腿丝袜制服诱惑综合天堂-| 91精品少妇搡搡搡| 色综合久久久久| 国产青青美女玩逼视频| 日韩,欧美,中文在线| 一级黄碟在线看| 亞洲久久直播| 999熟女精品| 国产精品老师| 99这里都是精品| 天天爽夜夜操| 欧美亚洲在线| 欧美久久婷| 日本三级一区二区 在线| 97九色人妻| 亚洲在线a| 亚洲男人天堂2012| 国产熟女无套内射| 久久蜜色情在线视频xxx免费观看| av天堂精品久久| 九九九不卡| 裸体女人草逼视频播放一区,二区,三区,四区,五区 | 韩国一级婬片A片AAAAA| 搡老女人老91二区| 欧美少妇大量自拍视频在线观看| 激情抓乳插进去啪啪啪日韩 | 亚洲欧美日韩免费电影| 国产91精品福利在线| 亚洲五码一区二区三区| 国内三级自拍小视频在线观看 | 亚洲一区二区性爱电影| 日本福利二区视频| 一区二区三区日韩欧美| 亚洲字幕一区二区| 中文字幕、久久精品国产2020、久久综合久久自在自线精品自、亚洲 | 九九九九九九九九九九九免费国产| 亚洲男人的天堂va亚洲男人社| 欧洲Au麻豆| 亚洲色系另类精品国产| 99综合免费视频| 青青草啪啪网| 蜜桃视频精品一区二区三区| 久久亚洲熟妇在线视频| 特级特黄一级毛片免费| 99爱精品| 99热在线观看| 激情九月婷婷| 99久久婷婷国产综合| 欧美久久人妻少妇一区二区| 啪啪AV导航| 玖玖视频在线资源一区二区三区| 亚洲成?V人片在线观看福利| 天天干,夜夜爽| 物业黑人 AV一区| 婷婷色色五月天| 黄久久| 久久久久久久| 日韩性爱电影一区| 免费a级毛片av无码久久精品中文字幕| 蜜臀少妇一区二区| 精品久一区免费| 97超碰超欧美。| 婷婷性网| 入口操逼网站| 白丝被操91| 学生妹天天看| 国产一区二区a毛片| 欧美日韩国产中文精品字幕自在自线| ,成人免费啪啪视频| 91天天| 中文字幕在线第二页| 亚洲官网在线| 一区| 台湾大香蕉99热| 97超级久久强资源| 蜜桃中文字日产乱幕4区| 国产粉嫩出水在线播放| 五月激情综合网| 色色99| 中出20p| 欧美 亚洲 制服 精品| 97久久超碰国产网站| 熟妇的味道HD中文字幕| 男人女人18禁片免费看网站| 玖草在线视频| 999色欧美中文字幕| 99最新日韩偷拍视频| 天堂精品| 78m啪啪啪| 欧美狠狠狠| 青娱乐啪啪视频| 啊啊啊啊网站| 日本乱人伦片中文三区| 综合av社区| 玖草在线视频| 日本成人免费一区二区三区| 国产一进一出视频网站| japan日本高清乱xxxx| 亚洲欧洲日韩国产自在线| 蜜桃av综合网发布| 91久久精品蜜臀| 中文字幕 国产区| 九九碰九九爱97超碰| 91色艳| 国产精品久久久蜜臀| 嗯阿好爽好紧| 日本中文字幕一区| 国产和美国毛片| 一本色道久久综合狠狠操| 美女t无毒不卡不卡| 高清无码人妻久久久一区二区三区aⅴ| 久久加勒比| 新怡红院| 家庭乱伦麻豆| 曰韩操B| 探花激情视频| 美女露胸露奶头| 神马久久69| 久草精品在线| 日小BB小视频| 婷色五月| 五月天婷婷欧美三区| 综合久久婷婷| 美女主播色欲91抠b在线播放| 亚洲黄色网址| 麻豆天美传媒毛片| 亚洲人妻中文高清| 日本在线观看网址| 午夜福利成人免费视频| 91黑丝露脚| 蜜桃久久久久久久久久久久| 风韵犹存大大大大香蕉| 人妻少妇被猛烈进入中| 另类图片五月| 少妇精品久久久八区九区| 综合五月天| 欧美自拍偷拍综合图片| 91久久久久免| 啊啊啊啊啊舒服| 国产亚洲中文不卡二区| 亚洲欧美中文日韩视频中国语| WWW美腿丝袜香蕉中文| 久久精品久| 国产综合永久精品日韩鬼片| 五月丁香综合网| 自拍亚洲综合| 久久精品超碰| 亚洲欧美日韩综合在线尤物| 日韩精品电影| 欧美日韩国产一区二区小黄片大全| 大地资源在线观看中文第二页| 亚洲丝袜色图| 干超碰碰熟女| www.99热| 99国产女人| 人人看人人插| 江都AV在线| 最新制服中文第一页| 亚洲九月丁香| 亚州色阁| www.91理论| 78久久| 91欧美少妇| 一级一性爱免费视频| 五月丁香| 综合亚洲欧美| 天天综合色| 东京热AV男人的天堂| 婷婷丁香九月| 99抽插| 超碰久超碰久| 六月婷婷色综合| 天操天操夜操夜月月年年操操| 欧美日韩黄片精品在线| 蜜桃在线观看一区二区三区 | 午夜一区二区三区国产| 宗合情欲网| 亚洲中文字幕在线视频一区二区| 九九热免费国产视频婷婷伊人| 嗯嗯不要视频| 青娱乐导航AV| 乱性AV| 日韩人妻大香蕉| 欧美熟妇精品黑人巨大91| 曰韩无码777| 亚洲色电影在线| 玖色AV| 在线日韩日本亚洲国产| 伊人久久国产免费观看视频| 国产精品久久久啊| 97色干| 欧美亚洲综合高清在线| 婷婷激情一区二区三区俺也去| 久久欲| 激情啪啪视频| 色色色色电影网| 97碰久久| 一区二区首页| 黄色片A级一区二区三区| 91黑丝美女| 蜜乳AV一区二区三区四| 2003天天干夜夜操| 日韩性爱再线视频| 亚洲女人91| 亚洲一二三精品久久网| 无码操逼网| 亚洲猛交| 成人老鸭窝人人在线视频| 国产精品不卡高清在线观看| 97精品综合久久| 男人天堂网站| 久神马| www.久久| 国产精品懂色tv影视免费观看| 久久久111| 大香网站| 亚洲综合另类| 青青青草伊人精品| 人人乐大香蕉| 色色色欧美| 91亚洲在线| 久久夜精品一区二区三区| 色婷婷综合网| 2020中文在线一区二区三区| 中文字幕丝袜| 亚洲无限观看| 九九热免费国产视频婷婷伊人| 国产精品人妻熟女aⅴ| 欧美亚洲天天| 麻豆传媒一区二区在线观看| 国产13区| 91九色精品熟女内射| ji熟女.com| 九九九九精品精| 久久久久久久久久久久欧美日| 韩国一级做A片免费的| 日本性感人妻91| 91色亚洲| 9长久久精品| 高凊专区人人操| 嫖老熟女A片一二三区| 亚洲码在线中文在线观看| 日日干夜夜欢| 在线观看A啊啊啊| 五月激情在线| 俺去俺来也在线www| 日韩操逼性鲍| 97爱爱| 99精品九九九九九九| 日韩大香蕉AV影片| 九九内射在线| 少妇高潮对白在线观看| 免费视频一二三区| 青青草依人大香蕉| 韩日自拍| 97超碰免费生活| 超碰精品| 熟女自慰久久久| 91是天天| 亚洲熟妇图片| 97亚洲性爱| 家庭乱伦网站国产| 狠狠中文字幕| 五月天久久综合网| 美国日韩黄片| 人人搞人人插人人操| 亚洲男人天堂av| 亚洲干B| 91视频女生| 综合大香蕉美。| 欧美在线|亚洲| 麻豆a'v电影| 少妇人妻激情四射| 蜜桃狠狠色伊人亚洲综合| 精品二999| 一本久久精品中文字| 伊人伊人LD| 黑人精品久久97| 欧美日韩青操| 西西美女视频网| 精品乱码久久久久| 久久草视频污视频| 一区二区三区在线日韩影院观看| 五十路人妻在线| 人妻丰满熟妇av无码区蜜桃| 亚洲精品蜜桃久久久| 青女偷拍网| 欧美日韩1234| 精品无码久久久久久久杏吧| 91东京热男人的天堂| 欧美老妇曰批的视频| 日韩国产在线观看av| 亚欧高清在线| 午夜欧美女人操逼| 国产农村一一级特黄毛片| 亚洲成人久久一区二区| 成人av动漫在线观看| 亚洲精品a人片在线观看视| 99人人干| 精品人妻二区三区| 精品9区| 婷婷综合久久| 91九九九吃| 78精品| 一区二区三区免费视频入口 | 福利大香蕉| 91天天美女| 色69大色97香蕉| 亚洲加勒比色图| 成人性交免费视屏| 国内偷拍精品一区二区| 超碰国产精品久| 亚洲av强奸乱伦| 97干在线看| 亚洲人在线成线成人| 99精品人人爽| 91视频在线观看18| 377p欧洲日本亚洲大胆| 精品色色| 啊好爽快点-国产一区二区三区撒尿在线-成人AV | 丁香六月婷婷综合| 亚洲s在线观看| 老鸭窝日丰县女人| 欧美性xxxxx狂欢| 亚洲图片欧洲图片aⅴ| 天美传媒国产原创中文字幕亚洲欧美另类 | 亚洲国产精品无石码久久| 天天懆天天日| 天天插天天插| 欧美亚洲宗合色性图| 91国模| 素人一区二区三区日韩| 99操碰| 日韩美女,国产传媒,视频一区| 久久久性爱| 福利操逼| 国产a级精品| 91欧美www| 亚洲第一精品在线视频| 青娱乐 成人娱乐在线| 狠狠躁久久躁| 制度丝袜99| 中文字幕 av v| 东京太热男人的天堂久久久| 成年女人黄网站| 97资源超碰| 欧美啪啪天堂| 日韩一性一交一A片俄罗斯| 97蜜桃综合| 亚洲综合校园春色| 国产精品蜜臀久久久久无码AV| 操人无码| 五月天亚洲网| 日韩欧美成人性爱在线| 成人女人国产| 日韩97P| 六月色色| 欧美色图99| 在线看片国产精品每日更新| 欧美色图天堂网m| 91肉丝| 国产小u女在线观看| 91天天爱| 强奸乱伦亚洲第一页| 亚洲欧美九九九| 日本影视久久免费| 综合一区中亚洲国产成人综合精品 | 男人的天堂激情| 日韩十八禁| 92午夜免费福利视频| 裸体1区| 成人一级性爱| 国产美女激情| 高潮毛片无遮挡高清免费| 九九精品美女高溯喷水| 男人天堂网站| 亚洲熟女国产综合另类| 久久AV无码AV| 一起草AV| 亚洲欧美碰碰| 日本精品第一视频在'| 国产91丝袜在线播放蜜月| 国产欧美岛国精品一区| 大香蕉伊然在亚洲91| 亚洲欧美一区二区三区一猛片| 裸体1区| 精品毛片久久久精品毛片| 四虎影视永久在线观看精品免费网站 | 日本激情免费大片| 国产精品午夜福利视频| 91伊人久| 人妻少妇色综合| 欧美国产伊人久久久久| 色偷偷综合91久久噜噜| 中文字幕人妻色偷偷久久皮 | 超碰99热中文字幕| 精品一区二区在线针对华人免费观看这里只有精品免费观看 | 日本新免费二区三区| 浪人综合网| 亚洲,欧美,综合网| 91无人区卡一卡二卡三乱码入口最新版:能让用户有更多选择的选择-经典说说-爱 | 天天综合网合集91| 国产成人+综合亚洲+天堂| 精品福利| 97精品综合久久网| 无码操逼网| 大香蕉中文网| 亚洲激情 欧美色图| 少妇厨房愉情理伦片bd在线观看| 日本欧美色| 俺去俺来也在线www| 亚洲国产综合图区中文字幕| 伊人久久大香线综合无码| 国产欧美在线观看免费观看| 91老熟女老女人国产老太| 激情九月婷婷| 国产中出内射一区二区| 人妻黑丝袜电影| 五月天激情视频| 人人操人人摸人人看人人插| 情色五月天就去干| 日本一二区免费| 午夜影美女日鸡鸡天天视频国产| 欧美亚洲丝袜人妻制服中文99| 亚洲天堂男人在线| 亚洲精品尤物yw在线影院| 久九九九九九九九热| 亚洲男人的天堂一区二区| 久操视频资源站公开| 97免费在线观看| 欧美日韩精品国产91| 97av在线视频| 福利操逼| 成·人免费午夜在线观看| 99热大香蕉伊在线| 国内精品不卡无毒99999| 免费簧片在线观看| 国产v亚洲v日韩v欧美v片另类| 亚洲日本天堂| 亚洲色欲一区二区三区| 日本三级日本三级99| 国产一区二区三区白丝| 国产一区二区在线播放| 天天天天天超碰| 日韩精品99999| aa片毛片| 精人妻无码一区二区三区伊人直播| 久久综合五月天| 亚洲精品天堂久久A∨51成人漫| 九久9精品| 久久一区二区加油站| 特级大荫道BBwBBwBBW| 婷婷五月天色| 国产二区三区免费视频| 久久久亚洲精品中文字幕人妻| 天天影视综合色| 久草国产在线视频| 精品高清牛人盗摄一区二区三区中文字幕A片免费在线观看 | 五月丁香啪啪网| 9997se| 日本女人操逼| 欧美一区二区三区黄色影视| 色香网| 欧美后入| 人妻熟女一区在| 国产99999久久精品| 国产怡红院| 超碰国产精品久| 乱老熟女一区二区三区| 中文久久爆乳| 欧美亚洲色图另类国产| 1769国内精品视频| 欧美色图20P| 蜜臀在线看片| 美性中文综合网| 欧美日韩丝袜| 亚洲天堂久久久久久粉红视频| 99成人| 清纯唯美亚洲综合| 91 亚洲 欧洲| 97av在线视频| 中文字幕精品久久久久人妻红杏ⅰ| 99日韩| 国产精品经典一卡久久久| 蜜桃精品视频一区| 精品久久視頻在线| 亚洲欧洲日韩国产自在线| 亚洲成人日韩小说| 色视频蜜乳| 日韩免费簧片| 亚洲巨爆乳一区二区三区四季网| 91欧洲国产成人久久精品网站| 熟女探花啪啪| 韩国三级色呦呦| 色综合av综合久久| 网站A V在线| 国产乱色国产精品免费视| 蜜乳AV.COM| 韩国一级婬片A片无码天美| 日韩操逼HD| 中文字幕精品一区二区精| 国产AV久久野战精品| 在线性黄高清免费视频| 一本一道波多野毛片中文在线| 强奸国产在线| 天天躁日日躁AAA片李宗瑞| 国产又爽又黄| 丝袜美腿欧美| 欧美亚洲丝袜美女电影| 天天色怡春院| 中文字幕第7页| 麻豆a'v电影| 亚洲少妇视频| 狠狠操官网| 五月丁香婷婷综合| 偷拍欧美综合| 四虎在线免费视频| 天久久久噜噜噜久久国产精品爽爽 | 丰满岳乱妇一区二区三区| 久久成人午夜精品影院| 欧美久久伊人| 久久久精品国产亚洲伊人| 性欧美另类高清| 久久久久亚洲精品| 玖玖无码超碰| 日韩成人性日韩成人性爱视频在线免费观看 | 国产白嫩精品久久| 青青欧美| 9118禁| 国产黄片精品在线| 九九成人| 久草精品一区| 91九九| 日操粉逼逼| 综合色色网| 二区熟妇韩日| 330dv亚洲成年视频网| 免费亚洲国产精品久久一区| 日韩av电影网站| 97香蕉网| · —级AA伦aa坐爱午夜极速ⅴA一区天天噪天天噪天天噪 | 精品少妇一区二区| 免费观看网黄| 日本欧美一区二区三区免费| 又黄又爽在线观看视频| 激情啪啪视频| 午夜舔阴达高潮视频免费看| 国产 日韩 另类 视频一区爱| 大香樵伊人网| 蜜臀亚洲中文| 无码heyzo高清一区| 亚洲色图欧美另类在线| 熟女人妻一区二区三区免费看| 三级特黄60分钟播放| 亚洲少妇色| 亚州欧美在线| 岛国免费黄色网址| 嗯嗯啊啊用力视频免费| 99精品人妻| 久久亚洲精品成人av| 一区二区视频你懂的| 亚洲欧美在线丝袜| 亚洲色图亚洲无码强奸乱伦| 97国产天堂岛| 97在线免费观看视频| 操曰本熟女| 国产女人高潮嗷嗷嗷叫小说| 台湾佬激情综合| 久久久久夜夜夜夜| 日韩激情小说一区二区| 天天综合香 ld视频| 国产精品内射婷婷一级二| 五月天精品| 国产精品农村妇女精品| 在线v中文字幕一区二区三区| 亚洲欧洲精品成人| 无码不卡八戒| GVH-003 母子姦 青木玲-麻豆视频,麻豆视传媒短视频网站入口,麻豆视传媒官网直 | 看免费的黄片| 天天爽夜夜欢视| 无码人妻一区二区三区色欲aⅴ| 欧美不卡在线美女| 久久超碰网| 亚洲 国产 精品一区| 国产精品动态一区二区三区四四| 少妇干B| s片在线观看| 日韩 欧美 另类 人妻| 9ⅰ久久久天天| 欧美日韩操操操| 超碰这里有精品| 久久青青草原免费视频| 熟女高潮合集-永久久久-成人AV| 欧美经典一区二区三区| 久久超碰98| 91人妻素女| 久久久涩| 九九Av| 免费精品无码一级毛片牛牛影视| 男人天堂站| 涩综合导航| 中文字幕在线2| 国产成久久综合片| 伊人网在线视频| 国产超碰人人操| 精品一区二区三区18| 天天插天天舔舔天天干| 亚洲精品一二区| 久久妇| 五月综合久久| 国产家庭乱伦表演| 免费网站观看www在线观| 强奸乱伦中文字幕AV| 97久久久久| 曰韩欧美国产传媒麻豆第一区| 51久久夜色精品国产麻豆| 亚洲91综合| 日韩成人电影AV| A片大香蕉在线| 青青草玖玖爱| 99激情| 国产毛片在线| 久久成人东京热人妻| 中文字幕av色| 免费亚洲黄色视频在线观看| 热久久无毒不卡| 亚洲麻豆精品二区三区| 午夜操逼不卡| 亚洲男人天堂视频| 少妇免费视频| 性爱精品一区| 熟女人妻精品一区二区视频| 日韩欧美偷拍美女视频| 国产精品色色| 麻豆视频国产一区二区| 亚洲九九视频| 亚洲限制级| 五月丁香啪啪| 国产精品久久天天干| 亚洲天堂一二| 五月天婷婷色色| 91熟女丨91老女人| 国产亚洲色婷婷99精品91| 开心五月激情网| 乱论91| 麻豆久久一区二区三区| 国产狂喷潮在线精品| 美女诱惑久久| 欧洲在线性爱视频| 亚洲精品乱码线路中文字幕 | 狠狠色综合网| 久射吧| 超碰无码五月97| 天天综合网~91| 免费看A片毛毛片在线播| 久日91在线| 999久久久精品国产| 欧美日韩香蕉| 欧美人与动性人交a| 欧美日本不卡| 黄呦呦在线| 曰韩av中文字幕专区| 免费av在线播放二区| 97免费在线| 久久精品国产亚洲粉嫩| 激情视频一二三| 99国产天美| 日韩天美| 操逼日韩无码| 91天堂色男人的天堂| 亚洲欧美在线观看无码| 97久久国产| 婷婷丁香人妻| 日夜尻逼网| 蜜臀AV成人精品蜜臀| 在线 亚洲 网爆 自拍| 殴美性色a级欧美| 亚洲偷拍自拍在线视频| 日韩免费大片一级播放| 国产午夜在线观看视频| 亚洲色图欧美| 精品久久久久久久| 亚洲小说视频| 精品国产综合久久福利,热99这里有精品综合久久,99热这里只有免费国产精品,精 | 91强在线播放| 台湾佬中文娱乐自偷自拍| 精品久久久久,69国产成人精| 六六久久日韩不卡| 成年女人18级毛片毛片免费观看| A 天堂在线观看视频| 91小视频| 免费一级性爱久久| 亚洲欧美一区二区网址| 在线日韩精品一区二区三区| 好色综合| 精品久| 明星性猛交ⅹxxx乱大交| 日韩无码一级黄色av片| 久热一区二区| 日韩精品在线视频,日韩精品……| 日本操逼视频免费| 五月婷亚洲精品天堂| 精品人妻中文字幕高清| 色吧 综合| 波多野结衣AV无码一区| 五月丁香黄色网| 2017人人操,人人摸| 美女刺激久久国产欧美| 九九视频黄色片| 八戒无码国产午夜福利| 啊啊啊啊啊啊啊啊在线观看| 亚洲天堂男人的天堂| 婷婷操视频| 911av网站免费观看| 操逼免费视频无码国产| 日韩国产成人自拍视频| 精品国产肉丝袜在线拍国语| 亚洲aV性爱| 欧日韩不卡视.频| 麻豆婷婷成人一二三| 精品然女一区二区| 天天操天天7| 亚洲美女精品九九视频| 性无码专区2020| 久久无码一区二区二三区性色 | 九九九九免费视频| 欧美淫乱视频| 91亚洲人| 日韩性爱视频在线免费观看| 久久av一级av少妇av高潮| 性爱av在线免费观看| 欧美亚洲激情小说| 国产天天骚| 欧美夜色| 久久精品无码专区| 久久超碰国产一区二区三区| 园内精品自拍视频在线播放| 国产精选三级在线观看| 久久久啊啊| 97资源站久久| 狼狼色丁香久久婷婷综合五月| 26uuu性物|