【C語言】探索文件讀寫函數的全貌

請添加圖片描述

請添加圖片描述
Alt

🌈個人主頁:是店小二呀
🌈C語言筆記專欄:C語言筆記
🌈C++筆記專欄: C++筆記

🌈喜歡的詩句:無人扶我青云志 我自踏雪至山巔
請添加圖片描述
🔥引言

本章將介紹文件讀取函數的相關知識和展示使用場景,通過這些函數就可以打開文件與我們之間的橋梁。

文章目錄

  • 一、文件的打開和關閉
  • 二、文件的打開模式
  • 三、文件路徑
  • 四、文件打開和關閉函數
    • 4.1 fopen()
    • 4.2 fclose()
  • 五、順序讀寫函數
    • 5.1 fputc()
    • 5.2 fgetc()
    • 5.3 實現文件拷貝
    • 5.4 fputs()
    • 5..5 fgets()
    • 5.6 fscanf和fprintf函數
    • 5.7 fprintf()
    • 5.8 fscanf()
    • 5.9 sprintf和sscanf函數
      • 5.9.1 sprintf()
      • 5.9.2 sscanf
      • 小總結
  • 六、二進制的方式讀寫函數
    • 6.1 fwrite()
    • 6.2 fread()
  • 七、文件的隨機讀寫
    • 7.1 fseek()
    • 7.2 ftell()
    • 7.3 rewind()
  • 八、文件讀取結束的判斷
    • 8.1 ferror()
    • 8.2 feof()
    • 小總結
    • 檢查文件讀取結束場景
  • 九、文件緩沖區


一、文件的打開和關閉

如果需要對文件進行一些讀寫操作,那么首先就需要先打開文件,在使用完以后關閉文件,所以最基本是打開文件和關閉文件

ANSIC規定使用fopen函數來打開文件,fclose來關閉文件

打開文件FILE *fopen(const char *filename,const char *mode);
關閉文件FILE *fclose(FILE *stream);

二、文件的打開模式

mode表示文件的打開模式,下面都是文件的打開模式

?件使??式含義如果指定?件不存在
“r”(只讀)為了輸?數據,打開?個已經存在的?本?件出錯
“w”(只寫)為了輸出數據,打開?個?本?件建??個新的?件
“a”(追加)向?本?件尾添加數據建??個新的?件
“rb”(只讀)為了輸?數據,打開?個?進制?件出錯
“wb”(只寫)為了輸出數據,打開?個?進制?件建??個新的?件
“ab”(追加)向?個?進制?件尾添加數據建??個新的?件
“r+”(讀寫)為了讀和寫,打開?個?本?件出錯
“w+”(讀寫)為了讀和寫,建議?個新的?件建??個新的?件
“a+”(讀寫)打開?個?件,在?件尾進?讀寫建??個新的?件
“rb+”(讀寫)為了讀和寫打開?個?進制?件出錯
“wb+”(讀寫)為了讀和寫,新建?個新的?進制?件建??個新的?件
“ab+”(讀寫)打開?個?進制?件,在?件尾進?讀和寫建??個新的?件

三、文件路徑

在打開和關閉文件一般直接輸入指定的文件名,當然也可以根據文件的路徑對該文件進行操作。

路徑分為:

  • 絕對路徑
  • 相對路徑
  • . 表示當前路徑
  • … 上一級路徑
對此當前文件test1.txt在D:\code\2024\2024\Document(絕對路徑)
FILE* pf = fopen("C:\\Users\\zpeng\\Desktop\\test.txt", "w");   當test1.txt在其他文件夾中,可以通過上面表示的關系尋找
FILE* pf = fopen(".\\..\\..\\hehe\\test.txt", "w");

四、文件打開和關閉函數

4.1 fopen()

FILE *fopen(const char * filename, const char * mode)

說明】:

  • 功能:打開其名稱在參數 filename 中指定的文件,并將其與流相關聯,該流可在將來的操作中通過返回的 FILE指針進行標識。
  • 返回值:如果文件成功打開,該函數將返回指FILE對象的指針,該對象可用于在將來的操作中標識流,如果文件沒有成功打開,則將返回NULL。
  • 允許對流執行的操作以及如何執行這些操作由 mode 參數定義

4.2 fclose()

int fclose(FLIE *stream)

說明】:

  • 功能:關閉與流關聯的文件并取消關聯
  • 與流關聯的所有內部緩沖區都將與其解除關聯并刷新:寫入任何未寫入的輸出緩沖區的內容,并丟棄任何未寫入輸入緩沖區的內容。(更新緩沖區)
  • 返回值:流關閉成功,則返回0。關閉失敗,返回EOF

五、順序讀寫函數

這里所有的輸入流、輸出流分別指stdin(標準輸入流)、stdout(標準輸出流)和文件流

5.1 fputc()

請添加圖片描述

函數部分說明】:

功能上:

將字符寫入流并推進位置指示器,然后自動前進1。適用于所有輸入流(字符輸入到流中)

參數部分上:

character

  • 將要寫入的字符的整型提升
  • 寫入時,該值在內部轉換為無符號字符

stream:

  • 指向標識輸出流的FILE對象指針

返回值:

  • 成功,將返回寫入的字符。發生寫入錯誤,則返回EOF并設置錯誤指示符(ferror)
int main()
{FILE* pf = fopen("test1.txt", "w");if (pf == NULL){perror("fopen fail!!!");return;}fputc('d', pf);fputc('e', pf);fclose(pf);pf = NULL;return 0;
}

在這里插入圖片描述

使用說明】:

  • 首次調用fputc函數將字符‘d’寫入到文件當中,位置指示器向前+1就會指向‘d’的下一個位置,第二次fputc函數時,字符‘e’在這個位置輸入進去。
  • 注意這里對流執行寫操作"w"模式
  • 對于stream可以是文件流也可以是標準流

練習】:使用fputc將A ~Z個字符輸入到指定文件和顯示器中

int main()
{FILE* pf = fopen("test1.txt", "w");if (pf == NULL){perror("fopen fail!!!");return;}for (char i = 'A'; i <= 'Z'; i++){fputc(i, pf);//輸入到文件中fputc(i, stdout);//輸入到顯示器中}fclose(pf);pf = NULL;return 0;
}

5.2 fgetc()

在這里插入圖片描述

函數部分說明】:

  • 功能:字符輸入函數,從流中獲得字符,返回指定流的內部文件位置指示符當前指向的字符內部文件位置指示器將前進到下一個字符
  • 返回值:成功后,將返回字符讀取(進行整型提升)。如果失敗則,返回EOF
int main()
{FILE* pf = fopen("test1.txt", "r");if (pf == NULL){perror("fopen fail!!!");return;}	char ch;//ch用于接收fgetc從流中獲得的字符ch = fgetc(pf);printf("%c", ch);ch = fgetc(pf);printf("%c", ch);fclose(pf);pf = NULL;return 0;
}

使用說明】:

  • 這里對流的操作采用mode是"r"模式
  • 此時在指定文件提前寫入數據,使用fgetc讀取該文中的數據,第一次使用時讀取‘h’字符,指示器++1,指向‘e’字符位置,在第二次使用讀取該字符。
  • 當然也可以直接從鍵盤讀取數據(使用標準輸入流stdin)–>改為ch = fgetc(stdin);

5.3 實現文件拷貝

通過以上兩個函數,我們可以用來實現文件拷貝的場景

int main()
{FILE* pfread = fopen("data1.txt", "r");if (pfread == NULL){perror("fopen fail!!!");return;}	FILE* pfwrite = fopen("data2.txt", "w");if (pfwrite == NULL){fclose(pfread);//讀文件操作沒有必要pfread=NULL;perror("fopen fail!!!");return;}char ch;while ((ch = fgetc(pfread)) != EOF){fputc(ch, pfwrite);}fclose(pfread);fclose(pfwrite);return 0;
}

在這里插入圖片描述

使用說明】:

  1. 這里先提前準備好兩個文件,并且在data1.txt中提前輸入數據
  2. 這里需要對兩個不同文件使用不同mode打開,對data1.txt使用讀的形式,而data2.txt是寫的形式打開
  3. 在while循環中一個從data1.txt讀取字符,同時一個向data2.txt輸入字符,直到讀取完成或者發生錯誤

5.4 fputs()

在這里插入圖片描述

函數部分說明】:

  • 功能:文本行輸入函數,將str指向的字符串寫入流中,從指定的地址開始復制,直到結束標志\0(\0’字符不會復制到流中
  • 返回值:成功,返回一個非負值,失敗,則返回EOF
int main()
{FILE * pf = fopen("test1.txt", "w");if (pf == NULL){perror("fopen fail!!!");return;}	//fputs("hellow world", pf); -- 將字符串輸入到文件流中fputs("hellow world", stdout); -- 將字符串輸入到輸出流中(打印到屏幕上)fclose(pf);pf=NULL;return 0;
}

5…5 fgets()

在這里插入圖片描述

函數部分說明】:

功能上:

  • 文本行輸入函數,從流中獲得字符串,直到讀取到num-1個字符或者在達到換行符或文件末尾(前者為準)
  • 換行符(\n)會使fgets停止,但函數將其視為有效字符,并包含在復制到str的字符串中,在將字符復制到str之后,會自動添加\0,導致只能讀取num-1字符

參數部分上:

str

  • 指向復制字符串讀取到char數組的指針(這里提前開辟好數組)

num:

  • 復制到str中的最大字符數(包括‘\0’字符-字符串)

返回值:

  • 成功,返回str指針,失敗,返回EOF
int main()
{FILE* pf = fopen("test1.txt", "r");if (pf == NULL){perror("fopen fail!!!");return;}char ch[1000]="xxxxxxx";fgets(ch, 7, pf);printf("%s", ch);fclose(pf);pf = NULL;return 0;
}

在這里插入圖片描述

說明】:給\0留了一個位置


5.6 fscanf和fprintf函數

fprintfscanf屬于格式化輸入輸出函數,將不同數據類型放在結構體中進行統一管理

struct S
{char a[1000];int p;float pa;
};

5.7 fprintf()

在這里插入圖片描述

函數部分說明】:

功能上

  • 按格式化數據寫入流,如果format包含格式說明符(%開頭的子序列),則格式化format后面的其他參數并將其插入到生成的字符串中,代替其各自的說明符.
  • 根據格式說明符順序,匹配不同類型對應的數據,輸入到text1.txt中去。

返回值:

  • 成功,返回寫入字符總數,失敗,則返回負數
int main()
{struct S s={"zhangsan",100,4.3};FILE* pf = fopen("test1.txt", "w");if (pf == NULL){perror("fopen fail!!!");return;}fprintf(pf,"%s %d %f", s.a, s.p, s.pa);fclose(pf);pf = NULL;return 0;
}

5.8 fscanf()

在這里插入圖片描述

函數部分說明】:

功能:

  • 從流中讀取數據,并根據格式將其存儲到其他參數指向的位置。
  • 該對象由格式化字符串的相應格式說明符指示。
  • 根據格式說明符順序,匹配text1.txt對應的數據,輸入到對應的數據變量中

返回值:

成功后,該函數返回已成功填充的參數列表的項數,失敗,EOF

int main()
{struct S s;//這里沒有初始化,目的是通過fscanf賦值FILE* pf = fopen("test1.txt", "r");if (pf == NULL){perror("fopen fail!!!");return;}	fscanf(pf, "%s %d %f", s.a, &(s.p), &(s.pa));printf("%s %d %f", s.a, s.p, s.pa);fclose(pf);pf = NULL;return 0;
}

5.9 sprintf和sscanf函數

5.9.1 sprintf()

在這里插入圖片描述

函數部分說明】:

功能:

從字符串中讀取格式化數據(將字符數組中的字符串按照格式說明符轉換為對應的格式化數據)

5.9.2 sscanf

在這里插入圖片描述

函數部分說明】:

功能:

將格式化數據寫入字符串(格式化數據轉換為字符串存放在字符數組中)

基于以上兩個函數使用場景:

int main()
{//將格式化的數據轉換為字符串存放在p數組中struct S s = { "zhangsan",100,4.3 };char p[1000] = { 0 };sprintf(p, "%s %d %f", s.a, s.p, s.pa);printf("%s\n", p);//從p這個字符串中提取格式化的數據(用p數組中的數據,為結構體t成員賦值)struct S t;sscanf(p, "%s %d %f", t.a, &(t.p), &(t.pa));printf("%s %d %lf", s.a, s.p, s.pa);return 0;
}

小總結

在這里插入圖片描述


六、二進制的方式讀寫函數

6.1 fwrite()

在這里插入圖片描述

函數部分說明】:
請添加圖片描述

功能:

  • 二進制輸出,將 count 元素數組(每個元素的大小為 size bytes)ptr 指向的內存塊寫入中的當前位置

返回值:

  • 成功將返回寫入元素個數
  • 如果此數字與 count 參數不同,則寫入錯誤會阻止函數完成
  • 如果 sizecount 為零,則函數返回零,錯誤指示器保持不變。
int main()
{FILE* pf = fopen("test1.txt", "wb");//打開一個二級制文件if (pf == NULL){perror("fopen fail!!!");return;}int nums[] = { 1,2,3,4,5,6,7 };fwrite(nums, sizeof(int), 7, pf);fclose(pf);pf = NULL;return 0;
}

注意】:這里是通過二進制的形式寫入文本文件中,如果想要看懂輸入的數據,可以在打開方式選擇二進制編輯器或者使用fread函數讀取出來


6.2 fread()

在這里插入圖片描述

函數部分說明】:

  • 功能:
  • 二進制輸入,從流中讀取 count 元素的數組,每個元素的大小為 bytes,并將它們存儲在 ptr 指定的內存塊中。

返回值:

  • 成功將返回寫入實際元素個數
  • 如果此數字與 count 參數不同,則表示讀取時發生讀取錯誤或達到文件末尾
  • 如果 sizecount 為零,則該函數返回零, ptr 指向的流狀態和內容保持不變

比如:如果實際文件中只有7個字符,count是14,那么讀到7給字符就結束(返回值 < count就返回)

int main()
{FILE* pf = fopen("test1.txt", "rb");//打開一個二級制文件if (pf == NULL){perror("fopen fail!!!");return;}//int nums[] = { 1,2,3,4,5,6,7 };//fwrite(nums, sizeof(int), 7, pf);//讀取二進制存放的信息int nums[10] = { 0 };fread(nums, sizeof(int), 10, pf);for (int i = 0; i < 10; i++){printf("%d ", nums[i]);}fclose(pf);pf = NULL;return 0;
}

在這里插入圖片描述


七、文件的隨機讀寫

由于文本文件和二進制文件使用方面存在差異,下面三個函數將采用二進制文件

7.1 fseek()

在這里插入圖片描述

函數部分說明】:

功能上:

  • 重新定位流位置指示器,根據文件指針的位置和偏移量定位文件指針

返回值:

  • 成功,返回零,失敗,返回非零值

注意】:

  • 二進制文件:要從原點偏移的字節數
  • 文本文件:零或 ftell 返回的值

【原點】

特別注意的是起源(從哪個位置),用作偏移參考位置

  • SEEK_SET :文件開頭
  • SEEK_CUR :文件指針的當前位置
  • SEEK_END: 文件末尾
int main()
{FILE* pf = fopen("test1.txt", "wb");//打開一個二級制文件if (pf == NULL){perror("fopen fail!!!");return;}fputs("This is an apple", pf);fseek(pf, 3, SEEK_SET);fputs("sam", pf);fseek(pf, -3, SEEK_END);//文件指針往前走fputs("xxx", pf);fclosereturn 0;
}

在這里插入圖片描述

7.2 ftell()

在這里插入圖片描述

函數部分說明】:

功能上:

  • 返回流的位置指示器的當前值(返回文件指針相對于起始位置的偏移量 )

返回值:

  • 對于二進制流,這是從文件開頭開始的字節
  • 對于文本流,數值可能沒有意義
int main()
{FILE* pf = fopen("test1.txt", "wb");//打開一個二級制文件if (pf == NULL){perror("fopen fail!!!");return;}fputs("This is an apple", pf);fseek(pf, 0, SEEK_END);int size = ftell(pf);printf("%d", size);//size==16,源頭到參考位置的字節數fclose(pf);pf = NULL;return 0;
}

7.3 rewind()

image-20240429202328302

函數部分說明】:

  • 功能:讓文件指針的位置回到文件的起始位置
int main()
{FILE* pf = fopen("test1.txt", "wb");//打開一個二級制文件if (pf == NULL){perror("fopen fail!!!");return;}fputs("This is an apple", pf);fseek(pf, 0, SEEK_END);rewind(pf);int size = ftell(pf);printf("%d", size);fclose(pf);pf = NULL;return 0;
}

請添加圖片描述


八、文件讀取結束的判斷

牢記】:在文件讀取過程中,不能用feof函數的返回值直接判斷文件是否結束

8.1 ferror()

在這里插入圖片描述

函數部分說明】:

  • 功能:檢查錯誤指示器
  • 返回值:檢查是否設置了與關聯的錯誤指示器,如果設置了,則返回一個不同于零的值

8.2 feof()

在這里插入圖片描述

函數部分說明】:

  • 功能:檢查文件結束指示器

  • 返回值:**如果設置了與流關聯的文件結束指示符,則返回非零值。**否則,返回零。

小總結

文本文件讀取是否結束:判斷返回值是否為EOF(fgetc)或者NULL(fgets)

二進制文件讀取是否結束:判斷返回值是否小于實際要讀的個數。


檢查文件讀取結束場景

while ((c = fgetc(fp)) != EOF) // 標準C I/O讀取
{putchar(c);
}//判斷是什么原因結束的if (ferror(fp))
puts("I/O error when reading");else if (feof(fp))
puts("End of file reached successfully");

九、文件緩沖區

ANSIC標準采?“緩沖文件系統”處理的數據?件的,所謂緩沖?件系統是指系統?動地在內存中為程序中每?個正在使?的?件開辟?塊“?件緩沖區”。從內存向磁盤輸出數據會先送到內存中的緩沖區,裝滿緩沖區后才?起送到磁盤上。如果從磁盤向計算機讀?數據,則從磁盤?件中讀取數據輸?到內存緩沖區(充滿緩沖區),然后再從緩沖區逐個地將數據送到程序數據區(程序變量等)。緩沖區的??根據C編譯系統決定的.上述過程轉換為下圖展示。

驗證】:

int main()
{
FILE*pf = fopen("test.txt", "w");
fputs("abcdef", pf);//先將代碼放在輸出緩沖區
printf("睡眠10秒-已經寫數據了,打開test.txt?件,發現?件沒有內容\n");
Sleep(10000);
printf("刷新緩沖區\n");
fflush(pf);//刷新緩沖區時,才將輸出緩沖區的數據寫到?件(磁盤)
//注:fflush 在?版本的VS上不能使?了
printf("再睡眠10秒-此時,再次打開test.txt?件,?件有內容了\n");
Sleep(10000);
fclose(pf);
//注:fclose在關閉?件的時候,也會刷新緩沖區
pf = NULL;
return 0;
}

目的】:

程序延遲執行時間內,檢查文本編輯器是否存在數據,等待程序睡眠時間過去,再次檢查文本編輯器是否存在數據,驗證內存和外存之間存在緩沖區

請添加圖片描述
請添加圖片描述

結論】:

因為有緩沖區的存在,C語?在操作文件的時候,需要做刷新緩沖區或者在?件操作結束的時候關閉文件。如果不做,可能導致讀寫?件的問題


請添加圖片描述

以上就是本篇文章的所有內容,在此感謝大家的觀看!這里是店小二C語言筆記,希望對你在學習C語言中有所幫助!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/19506.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/19506.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/19506.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

vue中如何進行Markdown文檔展示與解析

vue中如何進行Markdown文檔展示與解析 一、安裝插件二、如何使用 需求&#xff1a;接口返回了一個政策詳情頁面&#xff0c;里面有圖片&#xff0c;用v-html展示的是url&#xff0c;所以改用vue-markdown 一、安裝插件 npm install vue-markdown --save二、如何使用 <vue-…

RabbitMQ 如何保證消息不丟失

開啟消息確認機制&#xff1a; 在發布消息時&#xff0c;可以設置deliveryMode為2&#xff08;持久化&#xff09;&#xff0c;以確保消息不會因為RabbitMQ的崩潰而丟失。 使隊列持久化&#xff1a; 通過設置durable為true&#xff0c;可以確保隊列在RabbitMQ重啟后依然存在。…

Python 實戰:打造智能進銷存系統

想象一下&#xff0c;在繁忙的商店里&#xff0c;每天都有數以百計的商品進進出出&#xff0c;庫存在不斷變化&#xff0c;銷售數據涌入&#xff0c;而你卻能輕松應對一切。是的&#xff0c;Python 可以幫你實現這一切。本文將教你如何使用 Python 構建一個智能的進銷存系統&am…

學習記錄-5.30

學習記錄-5.30 同步在我的博客可以來看看 http://www.zhihuigou.top/ ### Golang為什么比別的語言跟擅長并發: 首先是因為Goroutine&#xff0c;算是go的一個最大的特色 是輕量級的線程,創建一個goroutine的開銷非常小,大約幾KB,且調度開銷很低 并且goroutine的調度,并不…

React組件通信——兄弟組件

兄弟組件通信 方法一&#xff1a;狀態提升 子組件先將數據傳遞到父組件&#xff0c;父組件再把數據傳到另一個子組件中。 import { useState } from "react"; // 定義A組件&#xff0c;向B組件發送數據 function A({ onGetMsg }) {const name "this is A na…

fyne apptab布局

fyne apptab布局 AppTabs 容器允許用戶在不同的內容面板之間切換。標簽要么只是文本&#xff0c;要么是文本和一個圖標。建議不要混合一些有圖標的標簽和一些沒有圖標的標簽。 package mainimport ("fyne.io/fyne/v2/app""fyne.io/fyne/v2/container"//&…

PolarDB分布式架構學習筆記

PolarDB分布式是什么&#xff1f; 業務場景有哪些&#xff1f; 分布式焦點問題&#xff1f; 技術架構 CN DN介紹 CDC組件介紹 Columnar組件介紹 視頻學習&#xff1a;PolarDB 實操課 第一講&#xff1a;PolarDB分布式版架構介紹_嗶哩嗶哩_bilibili

都在說的跨網文件共享系統是什么?企業該怎么甄選?

跨網文件共享系統成為越來越受關注的產品焦點&#xff0c;那么跨網文件共享系統是什么呢&#xff1f;跨網文件共享是指在不同網絡之間共享文件的過程&#xff0c;使得不同網絡中的用戶可以訪問和使用共享的文件。 原則上而言&#xff0c;不同網絡間的文件是無法共享的&#xff…

在SpringBoot中使用redis中的zset實現延遲任務

為什么使用zset實現延遲任務 ZSET&#xff08;有序集合&#xff09;適合實現延遲任務的原因主要有以下幾點&#xff1a; 排序特性&#xff1a;ZSET根據分數&#xff08;score&#xff09;自動排序&#xff0c;這使得我們可以將任務的執行時間作為分數&#xff0c;從而能夠輕松…

OAK相機如何將 YOLOv9 模型轉換成 blob 格式?

編輯&#xff1a;OAK中國 首發&#xff1a;oakchina.cn 喜歡的話&#xff0c;請多多&#x1f44d;??? 內容可能會不定期更新&#xff0c;官網內容都是最新的&#xff0c;請查看首發地址鏈接。 Hello&#xff0c;大家好&#xff0c;這里是OAK中國&#xff0c;我是Ashely。 專…

最新消息:騰訊大模型App“騰訊元寶“上線了

&#x1f9d9;?♂? 諸位好&#xff0c;吾乃斜杠君&#xff0c;編程界之翹楚&#xff0c;代碼之大師。算法如流水&#xff0c;邏輯如棋局。 &#x1f4dc; 吾之筆記&#xff0c;內含諸般技術之秘訣。吾欲以此筆記&#xff0c;傳授編程之道&#xff0c;助汝解技術難題。 &#…

Python代碼:二十八、密碼游戲

1、題目 牛牛和牛妹一起玩密碼游戲&#xff0c;牛牛作為發送方會發送一個4位數的整數給牛妹&#xff0c;牛妹接收后將對密碼進行破解。 破解方案如下&#xff1a;每位數字都要加上3再除以9的余數代替該位數字&#xff0c;然后將第1位和第3位數字交換&#xff0c;第2位和第4位…

2024年藝術鑒賞與科學教育國際會議(ICAASE 2024)

2024年藝術鑒賞與科學教育國際會議 2024 International Conference on Art Appreciation and Science Education 【1】會議簡介 2024年藝術鑒賞與科學教育國際會議是一場集藝術、科學和教育于一體的國際性學術盛會。本次會議旨在推動藝術鑒賞與科學教育領域的深入交流與合作&am…

C語言(字符函數和字符串函數)1

Hi~&#xff01;這里是奮斗的小羊&#xff0c;很榮幸各位能閱讀我的文章&#xff0c;誠請評論指點&#xff0c;關注收藏&#xff0c;歡迎歡迎~~ &#x1f4a5;個人主頁&#xff1a;小羊在奮斗 &#x1f4a5;所屬專欄&#xff1a;C語言 本系列文章為個人學習筆記&#x…

python API自動化(接口測試基礎與原理)

1.接口測試概念及應用 什么是接口 接口是前后端溝通的橋梁&#xff0c;是數據傳輸的通道&#xff0c;包括外部接口、內部接口,內部接口又包括&#xff1a;上層服務與下層服務接口&#xff0c;同級接口 外部接口&#xff1a;比如你要從 別的網站 或 服務器 上獲取 資源或信息 &a…

SpringMVC框架學習筆記(四):模型數據 以及 視圖和視圖解析器

1 模型數據處理-數據放入 request 說明&#xff1a;開發中, 控制器/處理器中獲取的數據如何放入 request 域&#xff0c;然后在前端(VUE/JSP/...)取出顯 示 1.1 方式 1: 通過 HttpServletRequest 放入 request 域 &#xff08;1&#xff09;前端發送請求 <h1>添加主人…

使用dockerfile快速構建一個帶ssh的docker鏡像

不多說先給代碼 FROM ubuntu:22.04 # 基礎鏡像 可替換為其他鏡像 USER root RUN echo root:root |chpasswd RUN apt-get update -y \&& apt-get install -y git wget curl RUN apt-get install -y openssh-server vim && apt clean \&& rm -rf /tmp/…

在SpringBoot項目中實現切面執行鏈功能

1.定義切面執行鏈頂級接口 AspectHandler /*** 切面執行鏈**/ public interface AspectHandler {/*** 設置排除項* param excludes*/default void setExcludes(List<String> excludes) {}/*** 獲取排除項* return*/default List<String> getExcludes() {return ne…

事務與并發控制

事務&#xff08;Transaction0&#xff09;&#xff1a;要么全做&#xff0c;要么全不做&#xff1b; 事務ACID&#xff1a;原子性Atomicity&#xff1b;一致性Consistency&#xff1b;隔離性Isolation&#xff1b;持久性Durability&#xff1b; 并發操作問題&#xff1a; 1.…

基于RNN和Transformer的詞級語言建模 代碼分析 _generate_square_subsequent_mask

基于RNN和Transformer的詞級語言建模 代碼分析 _generate_square_subsequent_mask flyfish Word-level Language Modeling using RNN and Transformer word_language_model PyTorch 提供的 word_language_model 示例展示了如何使用循環神經網絡RNN(GRU或LSTM)和 Transforme…