這篇文章的內容是php文字操作方法集合比較,現在分享給大家,也可以給有需要的朋友一個參考
fgets和fputs、fread和fwrite、fscanf和fprintf
字串讀寫函數fgets和fputs
一、讀取字串函數fgets函數的功能是從指定的檔案讀一個字串到字元陣列中,函數呼叫的形式為: fgets(字元數組名,n,文件指標); 其中的n是一個正整數。表示從文件中讀出的字串不超過 n-1個字元。在讀入的最後一個字元後加上串結束標誌'\0'。例如:fgets(str,n,fp);的意義是從fp所指的檔案中讀出n-1個字元送入 字元陣列str。
[例10.4]從e10_1.c檔案讀入一個含10個字元的字串。
#include
main()
{
FILE *fp;
char str[11];
if((fp=fopen(" e10_1.c","rt"))==NULL)
{
printf("Cannot open file strike any key exit!");
getch();
exit(1);
}
fgets(str,11,fp);
printf("%s",str);
fclose(fp);
}
本範例定義了一個字元數組str共11個位元組,在以讀取文字檔案方式開啟檔案e101.c後,從中讀出10個字元送入str數組,在陣列最後一個單元內將加上'\0',然後在螢幕上顯示輸出str數組。輸出的十個字元正是例10.1程式的前十個字元。
對fgets函數有兩點說明:
1. 在讀出n-1個字元之前,如遇到了換行符或EOF,則讀出結束。
2. fgets函數也有回傳值,其傳回值是字元陣列的首位址。
二、寫入字串函數fputs
fputs函數的功能是寫入一個字串,其呼叫形式為指定的檔案: fputs(字串,檔案指標) 其中字串可以是字串常數,也可以是字元數組名, 或指標 變量,例如:
fputs(“abcd“,fp);
其意義是把字串“abcd”寫入fp所指的文件之中。 [例10.5]在例10.2中建立的檔案string中追加一個字串。
#include
main()
{
FILE *fp;
char ch,st[20];
if((fp=fopen ("string","at+"))==NULL)
{
printf("Cannot open file strike any key exit!");
getch();
exit(1);
}
printf("input a string:\n");
scanf("%s",st);
fputs(st,fp);
rewind(fp);
ch=fgetc(fp);
while(ch!=EOF)
{
putchar(ch);
ch=fgetc(fp);
}
printf ("\n");
fclose(fp);
}
本範例要求在string檔案結尾加上寫入字串,因此,在程式第6行以追加讀取寫入文字文件的方式開啟檔案string 。 接著輸入字串, 並用fputs函數把該字串寫入檔案string。在程式15行用rewind函數把檔案內部位置指標移到檔案首。 再進入循環逐一顯示目前文件中的全部內容。
資料塊讀寫函數fread和fwrite
C語言也提供了用於整塊資料的讀寫函數。 可用來讀寫一組數據,如一個陣列元素,一個結構變數的值等。讀取資料塊函數呼叫的一般形式為: fread(buffer,size,count,fp); 寫資料塊函數呼叫的一般形式為: fwrite(buffer,size,count,fp); 其中buffer為指針,在fread函數中,它表示存放輸入資料的首地址。在fwrite函數中,它表示存放輸出資料的首地址。 size 表示資料塊的位元組數。 count 表示要讀寫的資料塊塊數。 fp 表示文件指標。
例如:
fread(fa,4,5,fp); 其意義是從fp所指的文件中,每次讀4個位元組(一個實數)送入實數組fa中,連續讀5次,即讀5個實數到fa中。
[例10.6]從鍵盤輸入兩個*,寫入一個檔案中, 再讀出這兩位學生的資料顯示在螢幕上。
#include
struct stu
{
char name[10];
int num;
int age;
char addr[15 ];
}boya[2],boyb[2],*pp,*qq;
main()
{
FILE *fp;
char ch;
int i ;
pp=boya;
qq=boyb;
if((fp=fopen("stu_list","wb+"))==NULL)
{
printf("Cannot open file strike any key exit!");
getch();
exit(1);
}
printf("\ninput data\n");
for(i=0 ;iscanf("%s%d%d%s",pp->name,&pp->num,&pp->age,pp->addr);
pp=boya;
fwrite(pp,sizeof(struct stu),2,fp);
rewind(fp);
fread(qq,sizeof(struct stu),2,fp) ;
printf("\n\nname\tnumber age addr\n");
for(i=0;iprintf("%s\t%5d% 7d%s\n",qq->name,qq->num,qq->age,qq->addr);
fclose(fp);
}
#本例程式定義了一個結構stu,說明了兩個結構數組boya和 boyb以及兩個結構指標變數pp和qq。 pp指向boya,qq指向boyb。程式第16行以讀寫方式開啟二進位檔案“stu_list”,輸入二個學 生資料之後,寫入該檔案中, 接著把檔案內部位置指標移到檔案首,讀出兩塊*後,螢幕上顯示。
格式化讀寫函數fscanf和fprintf
fscanf函數,fprintf函數與前面使用的scanf和printf 函數的功能相似,都是格式化讀寫函數。 兩者的差別在於 fscanf 函數和fprintf函數的讀寫物件不是鍵盤和顯示器,而是磁碟檔案。這兩個函數的呼叫格式為: fscanf(文件指針,格式字串,輸入表格列); fprintf(文件指針,格式字串,輸出表列); 例如:
fscanf(fp," %d%s",&i,s);
fprintf(fp,"%d%c",j,ch);
用fscanf和fprintf函數也可以完成例10.6的問題。修改後的程序如例10.7所示。
[範例10.7]
#include
struct stu
{
char name[10];
int num;
int age;
char addr[15];
}boya[2],boyb[2],*pp,*qq;
main()
{
FILE *fp;
char ch;
int i;
pp=boya;
qq=boyb;
if((fp=fopen("stu_list","wb+"))==NULL)
{
printf("Cannot open file strike any key exit!");
getch();
exit(1);
}
printf("\ninput data\n" );
for(i=0;iscanf("%s%d%d%s",pp->name,&pp->num,&pp-> ;age,pp->addr);
pp=boya;
for(i=0;ifprintf(fp,"%s %d %d %s \n",pp->name,pp->num,pp->age,pp->
addr);
rewind(fp);
for(i=0;i< ;2;i++,qq++)
fscanf(fp,"%s %d %d %s\n",qq->name,&qq->num,&qq->age,qq->addr );
printf("\n\nname\tnumber age addr\n");
qq=boyb;
for(i=0;iprintf( "%s\t%5d %7d %s\n",qq->name,qq->num, qq->age,
qq->addr);
fclose(fp) ;
}
與範例10.6相比,本程式中fscanf和fprintf函數每次只能讀寫一個結構數組元素,因此採用了循環語句來讀寫全部數組元素。 也要注意指標變數pp,qq由於循環改變了它們的值,因此在程式的25和32行分別對它們重新賦予了陣列的首位址。
檔案的隨機讀寫
前面介紹的對檔案的讀寫方式都是順序讀寫, 即讀寫檔案只能從頭開始,順序讀寫各個資料。 但在實際問題中常要求只讀寫文件中某一指定的部分。 為了解決這個問題可移動檔案內部的位置指標到需要讀寫的位置,再進行讀寫,這種讀寫稱為隨機讀寫。 實現隨機讀寫的關鍵是要依要求移動位置指針,這稱為檔案的定位。文件定位移動文件內部位置指標的函數主要有兩個, 即 rewind 函數和fseek函數。
rewind函數前面已多次使用過,其調用形式為: rewind(檔案指標); 它的功能是將檔案內部的位置指標移到檔案首。 下面主要介紹
fseek函數。
fseek函數用來移動檔案內部位置指針,其呼叫形式為: fseek(檔案指針,位移量,起始點); 其中:「檔案指針」指向被移動的檔案。 「位移量」表示移動的位元組數,要求位移量是long型數據,以便在檔案長度大於64KB 時不會出錯。當以常數表示位移量時,要求加後綴“L”。 「起始點」表示從何處開始計算位移量,規定的起始點有三種:文件首,目前位置和文件尾。
其表示法如表10.2。
起始點 表示符號 數字表示
──────────────────────────
文件首 SEEK—SET SEEK—SET
目前位置 SEEK—CUR 1
檔案結尾 SEEK—END 2
例如:
fseek(fp,100L,0);
##例如:
###fseek(fp,100L,0);#####fseek(fp,100L);文件首100個位元組處。還要說明的是fseek函數一般用於二進位檔案。在文字檔案中由 於要進行轉換,故往往計算的位置會出現錯誤。文件的隨機讀寫在移動位置指標之後, 即可用前面介紹的任一種讀寫函數進行讀寫。由於一般是讀寫一個資料據塊,因此常用fread和fwrite函數。下面用例題來說明文件的隨機讀寫。 ######[例10.8]在學生文件stu list中讀出第二位學生的資料。
#include
struct stu
{
char name[10];
int num;
int age;
char addr[15 ];
}boy,*qq;
main()
{
FILE *fp;
char ch;
int i=1;
qq=&boy;
if((fp=fopen("stu_list","rb"))==NULL)
{
printf("Cannot open file strike any key exit!");
getch();
exit(1);
}
rewind(fp);
fseek(fp,i*sizeof(struct stu),0);
fread(qq,sizeof(struct stu) ,1,fp);
printf("\n\nname\tnumber age addr\n");
printf("%s\t%5d %7d %s\n",qq->name ,qq->num,qq->age,
qq->addr);
}
檔案stu_list已由例10.6的程式建立,本程式用隨機讀出的方法讀出第二個學生的數據。程式中定義boy為stu類型變量,qq為指向boy 的指標。以讀二進位檔案方式開啟文件,程式第22行移動文件位置指標。其中的i值為1,表示從文件頭開始,移動一個stu類型的長度, 然後再讀出的數據即為第二個學生的數據。
檔案偵測函數
C語言中常用的檔案偵測函數有以下幾個。
一、檔案結束偵測函數feof函數呼叫格式: feof(檔案指標);
功能:判斷檔案是否處於檔案結束位置,如檔案結束,則傳回值為1,否則為0。
二、讀寫檔案出錯偵測函數ferror函數呼叫格式: ferror(檔案指標);
功能:檢查檔案在使用各種輸入輸出函數進行讀寫時是否出錯。 如ferror回傳值為0表示未出錯,否則表示有錯。
三、檔案出錯標誌和檔案結束標誌置0函數clearerr函數呼叫格式: clearerr(檔案指標);
功能:此函數用於清除出錯標誌和檔案結束標誌,使它們為0值。
C庫文件
C系統提供了豐富的系統文件,稱為庫文件,C的庫文件分為兩類,一類是擴展名為".h"的文件,稱為頭文件, 在前面的包含命令中我們已多次使用過。在".h"檔案中包含了常數定義、 類型定義、巨集定義、函數原型以及各種編譯選擇設定等資訊。另一類是函數庫,包括了各種函數的目標程式碼,供使用者在程式中呼叫。 通常在程式中呼叫一個函式庫函數時,要在呼叫之前包含該函數原型所在的".h" 檔案。
在附錄中給出了全部函式庫函數。
ALLOC.H 說明記憶體管理函數(分配、釋放等)。
ASSERT.H 定義 assert調試巨集。
BIOS.H 說明呼叫IBM—PC ROM BIOS子程式的各個函數。
CONIO.H 說明呼叫DOS控制台I/O子程式的各個函數。
CTYPE.H 包含有關字元分類及轉換的名類資訊(如 isalpha和toascii等)。
DIR.H 包含目錄和路徑的結構、巨集定義和函數。
DOS.H 定義和說明MSDOS和8086所呼叫的一些常數和函數。
ERRON.H 定義錯誤代碼的助記符。
FCNTL.H 定義在與open庫子程式連接時的符號常數。
FLOAT.H 包含一些浮點運算的參數和函數。
GRAPHICS.H 說明圖形功能的各個函數,圖形錯誤代碼的常數定義,正對不同驅動程式的各種顏色值,及函數用到的一些特殊結構。
IO.H 包含低階I/O子程式的結構和說明。
LIMIT.H 包含各環境參數、編譯時間限制、數的範圍等資訊。
MATH.H 說明數學運算函數,也設定了 HUGE VAL 宏, 說明了matherr和matherr子程式用到的特殊結構。
MEM.H 說明一些記憶體運算子(其中大多數也在STRING.H 中說明)。
PROCESS.H 說明進程管理的各個函數,spawn…和EXEC …函數的結構說明。
SETJMP.H 定義longjmp和setjmp函數用到的jmp buf類型, 則說明這兩個函數。
SHARE.H 定義檔案共享函數的參數。
SIGNAL.H 定義SIG[ZZ(Z] [ZZ)]IGN和SIG[ZZ(Z] [ZZ)]DFL常數,說明rajse和signal兩個函數。
STDARG.H 定義讀取函數參數表的巨集。 (如vprintf,vscarf函數)。
STDDEF.H 定義一些公用資料型別和巨集。
STDIO.H 定義Kernighan和Ritchie在Unix System V 中定義的標準和擴充的型別和巨集。也定義標準I/O 預定義流:stdin,stdout和stderr,說明 I/O流子程式。
STDLIB.H 說明一些常用的子程式:轉換子程式、搜尋/ 排序子程式等。
STRING.H 說明一些字串運算和記憶體運算子。
SYS\STAT.H 定義一些在開啟和建立檔案時所使用的符號常數。
SYS\TYPES.H 說明ftime函數和timeb結構。
SYS\TIME.H 定義時間的型別time[ZZ(Z] [ZZ)]t。
TIME.H 定義時間轉換子程式asctime、localtime和gmtime的結構,ctime、 difftime、 gmtime、 localtime和stime使用到的類型,並提供這些函數的原型。
VALUE.H 定義一些重要常數, 包括依賴機器硬體的和為與Unix System V相相容而說明的一些常數,包括浮點和雙精確度值的範圍。
相關推薦:
以上是php文字操作方法集合比較的詳細內容。更多資訊請關注PHP中文網其他相關文章!

PHP在電子商務、內容管理系統和API開發中廣泛應用。 1)電子商務:用於購物車功能和支付處理。 2)內容管理系統:用於動態內容生成和用戶管理。 3)API開發:用於RESTfulAPI開發和API安全性。通過性能優化和最佳實踐,PHP應用的效率和可維護性得以提升。

PHP可以輕鬆創建互動網頁內容。 1)通過嵌入HTML動態生成內容,根據用戶輸入或數據庫數據實時展示。 2)處理表單提交並生成動態輸出,確保使用htmlspecialchars防XSS。 3)結合MySQL創建用戶註冊系統,使用password_hash和預處理語句增強安全性。掌握這些技巧將提升Web開發效率。

PHP和Python各有優勢,選擇依據項目需求。 1.PHP適合web開發,尤其快速開發和維護網站。 2.Python適用於數據科學、機器學習和人工智能,語法簡潔,適合初學者。

PHP仍然具有活力,其在現代編程領域中依然佔據重要地位。 1)PHP的簡單易學和強大社區支持使其在Web開發中廣泛應用;2)其靈活性和穩定性使其在處理Web表單、數據庫操作和文件處理等方面表現出色;3)PHP不斷進化和優化,適用於初學者和經驗豐富的開發者。

PHP在現代Web開發中仍然重要,尤其在內容管理和電子商務平台。 1)PHP擁有豐富的生態系統和強大框架支持,如Laravel和Symfony。 2)性能優化可通過OPcache和Nginx實現。 3)PHP8.0引入JIT編譯器,提升性能。 4)雲原生應用通過Docker和Kubernetes部署,提高靈活性和可擴展性。

PHP適合web開發,特別是在快速開發和處理動態內容方面表現出色,但不擅長數據科學和企業級應用。與Python相比,PHP在web開發中更具優勢,但在數據科學領域不如Python;與Java相比,PHP在企業級應用中表現較差,但在web開發中更靈活;與JavaScript相比,PHP在後端開發中更簡潔,但在前端開發中不如JavaScript。

PHP和Python各有優勢,適合不同場景。 1.PHP適用於web開發,提供內置web服務器和豐富函數庫。 2.Python適合數據科學和機器學習,語法簡潔且有強大標準庫。選擇時應根據項目需求決定。

PHP是一種廣泛應用於服務器端的腳本語言,特別適合web開發。 1.PHP可以嵌入HTML,處理HTTP請求和響應,支持多種數據庫。 2.PHP用於生成動態網頁內容,處理表單數據,訪問數據庫等,具有強大的社區支持和開源資源。 3.PHP是解釋型語言,執行過程包括詞法分析、語法分析、編譯和執行。 4.PHP可以與MySQL結合用於用戶註冊系統等高級應用。 5.調試PHP時,可使用error_reporting()和var_dump()等函數。 6.優化PHP代碼可通過緩存機制、優化數據庫查詢和使用內置函數。 7


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境