文件操做中 fgets、fputs 函數詳解

C語言文件操做中 fgets、fputs 函數詳解api

先給出api數組

fgets 
語法: 
  #include <stdio.h>
  char *fgets( char *str, int num, FILE *stream );

函數fgets()從給出的文件流中讀取[num - 1]個字符而且把它們轉儲到str(字符串)中. fgets()在到達行末時中止,在這種狀況下,str(字符串)將會被一個新行符結束. 若是fgets()達到[num - 1]個字符或者遇到EOF, str(字符串)將會以null結束.fgets()成功時返回str(字符串),失敗時返回NULL.

 

本身理解緩存

一、每次讀取一行,若是讀取的一行字符數 len  > bufsize-1,則 buf[ bufsize-1 ] = '0'函數

       文件句柄指向第bufsize的位置。spa

二、每次讀取一行,若是讀取的一行字符數 len = bufsize-1,則 buf[ bufsize-1 ] = '0'code

         文件句柄指向第bufsize的位置。ci

 

三、每次讀取一行,若是讀取的一行字符數  len < bufsize-1,則 buf [ len-1 ] = '\n' , buf [ len ] = '\0'字符串

         文件句柄指向下一行的首位置。get

驗證代碼:io

int i=0;
	FILE *fp;
	char buff[5];
	//將數組賦值爲9,便於後面與賦值的地方比較 
	memset(buff,9,sizeof(buff));
	
	char *fName = "d:/123.txt"; 
	fp = fopen(fName,"r");
	fgets(buff,sizeof(buff),fp);
	
	//打印出數組的ascii碼  
	printf("buff數組內容:\n");
	for(i=0;i<sizeof(buff);i++)
	{
		printf("%d    ",(int)buff[i]);	
	}
	printf("\n");
	
	//繼續獲取下一行字符,驗證文件句柄的位置
	memset(buff,9,sizeof(buff));
    fgets(buff,sizeof(buff),fp);
    //打印出數組的ascii碼  
	printf("下一行buff數組內容:\n");
	for(i=0;i<sizeof(buff);i++)
	{
		printf("%d    ",(int)buff[i]);	
	}
	printf("\n");
	
	fclose(fp);

123.txt 文件內容:

1234
asdf

輸出結果:

buff長度爲4,驗證理解1

buff數組內容:
49    50    51    0
下一行buff數組內容:
52    10    0    9

 

buff長度爲5,驗證理解2

buff數組內容:
49    50    51    52    0
下一行buff數組內容:
10    0    9    9    9

buff長度爲10,驗證理解3

buff數組內容:
49    50    51    52    10    0    9    9    9    9
下一行buff數組內容:
97    115    100    102    0    9    9    9    9    9

 

文件寫入數據本質:

將字符串插入到文件中,在字符串的結尾處插入換行符'\n'

 

fgets函數本質:

按照須要寫入的緩存空間大小,將文件中的buffsize-1個字符寫入到緩存空間,將緩存空間的buffsize位置寫入'\0'字符。

 

fputs函數本質:

將指定的字符串寫入文件流中,不包含字符串結尾符'\0',利用它能夠替換文件流中數據,可是不能添加數據。

驗證代碼

        FILE *fp;
	char *fName = "d:/123.txt"; 
	fp = fopen(fName,"r+");
	fseek(fp,3,SEEK_CUR);
	fputs("Insert Strings",fp);
	fclose(fp);

原文件內容:

1234
Second Line. Second Strings.

修改後文件內容:

123Insert Strings. Second Strings.

能夠看出,將原文件中的「\n及Second Line.」 替換爲了「Insert Strings.」

fputc函數本質:

函數fputc()把給出的字符ch寫到給出的輸出流中的指定位置. 返回值是字符, 發生錯誤時返回值是EOF. 能夠替換文件流中數據,可是不能添加數據。

fgetc函數本質:

fgetc()函數返回來自stream(流)中的下一個字符,若是到達文件尾或者發生錯誤時返回EOF. 是什麼字符,就返回什麼字符(包括'\0','\n')。

 

歡迎你們批評指正,多提建議。

沙米祝你們工做順利。

相關文章
相關標籤/搜索