函数 —— fgets()
生活随笔
收集整理的這篇文章主要介紹了
函数 —— fgets()
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
//char *fgets(char *str, int n, FILE *stream)
/*功能:
?*從文件指針stream中讀取n-1個字符,存到以str為起始地址的空間里,直到讀完一行,如果成功則返回str的指針,否則返回NULL。*/
/*參數:
?* str -- 這是指向一個字符數組的指針,該數組存儲了要讀取的字符串。
?* n -- 這是要讀取的最大字符數(包括最后的空字符)。通常是使用以 str 傳遞的數組長度。
?* stream -- 這是指向 FILE 對象的指針,該 FILE 對象標識了要從中讀取字符的流。*/
/*返回值:
?* 成功返回buf,失敗或者讀到文件結尾返回NULL
?* */
/*結束的標志:
?* 當讀取 (n-1) 個字符時,或者讀取到換行符時,或者到達文件末尾時,它會停止,具體視情況而定*/
/*出錯終止的判斷:
?*不能直接通過fgets的返回值來判斷函數是否是出錯而終止的,應該借助feof函數或者ferror函數來判
/*功能:
?*從文件指針stream中讀取n-1個字符,存到以str為起始地址的空間里,直到讀完一行,如果成功則返回str的指針,否則返回NULL。*/
/*參數:
?* str -- 這是指向一個字符數組的指針,該數組存儲了要讀取的字符串。
?* n -- 這是要讀取的最大字符數(包括最后的空字符)。通常是使用以 str 傳遞的數組長度。
?* stream -- 這是指向 FILE 對象的指針,該 FILE 對象標識了要從中讀取字符的流。*/
/*返回值:
?* 成功返回buf,失敗或者讀到文件結尾返回NULL
?* */
/*結束的標志:
?* 當讀取 (n-1) 個字符時,或者讀取到換行符時,或者到達文件末尾時,它會停止,具體視情況而定*/
/*出錯終止的判斷:
?*不能直接通過fgets的返回值來判斷函數是否是出錯而終止的,應該借助feof函數或者ferror函數來判
?* */
#include <stdio.h> #include <string.h>int main() {FILE *fp;char str[60];int len;char str_1[60] = "This is test file!";printf("文件中文本內容:str_1 = %s\n",str_1); printf("文件中文本長度:strlen(str_1) = %d\n",strlen(str_1)); /* 打開用于讀取的文件 */fp = fopen("file.txt" , "r");if(fp == NULL) {perror("打開文件時發生錯誤");return(-1);}printf("strlen(str) = %d\n",strlen(str));printf("sizeof(str) = %d\n",sizeof(str)); //是因為fgets(str,n,fp)函數中,n為求得到的字符,但只能從fp指向的文件輸入n-1個字符,然后在最后加上一個'\0'字符,因此得到的字符串有n個字符,把它們放到str的首地址。 //所以實際上len-1才是我們希望看到的數目 //注意:當n的長度小于字符串的長度時候,len 就是我們看到的數目。if( fgets (str, 60, fp)!=NULL ) {/* 向標準輸出 stdout 寫入內容 *///puts(str); len = strlen(str);printf("str = %s len = %d\n",str,len-1);}fclose(fp);return(0); } /* 結果* 當n=60 > 18 時候:str為 This is test file!* str長度應為18;len的值為19;實際上len-1是我們希望看到的數目,此時len-1=18* :原因:n大于該行的字符總數加2(多出來的兩個,一個保存文件本身的'\n'換行,一個保存字符串本身的結束標識'\0')* 當n=7 < 18時候:str為 This i* str長度為應6;len的長度為6;實際上len是我們希望看到的數目,此時len-1=5* :原因:n小于該行字符總數,讀取文件的指針會偏移至當前讀取完的這個字符之后的位置。也就是第二次再用fgets()讀取文件的時候,則會繼續讀取其后的字符* */ 例:如果一個文件的當前位置的文本如下Love, I HaveSince you can do it.如果用fgets(str1,6,file1);去讀取則執行后str1 = "Love," ,讀取了6-1=5個字符這個時候再執行fgets(str1,20,file1)則執行后str1 = " I Have\n"而如果fgets(str1,23,file1);則執行str1="Love ,I Have" ,讀取了一行(包括行尾的'\n',并自動加上字符串結束符'\0'),當前文件位置移至下一行,雖然23大于當前行上字符總和,可是不會繼續到下一行。而下一次調用fgets()繼續讀取的時候是從下一行開始讀。總結
以上是生活随笔為你收集整理的函数 —— fgets()的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 二叉树 —— 创建二叉树 先序遍历
- 下一篇: 读文件 —— 读写配置文件