c語言庫函數fgets,C語言 標準I/O庫函數 fgets 使用心得

char *fgets(char *s, int n, FILE *stream);

參數說明:

s --

指定存放所讀取的數據的位置

n -- 指定所讀取數據的最大長度(這個最大長度包括了字符串結束符 \0

所占據的存儲空間,因此,實際最大讀取的有效字符數是 n - 1)

stream --

數據源,是一個文件指針

fgets

函數用于從“輸入”字符串中讀取指定長度的字符串。這個“輸入”字符串既可以是通過fopen等開啟的文件流,也可以是直接從鍵盤鍵入的

stdin。通俗點說就是,它既可以從一個文本文件中一行、一行地(當然,還需要循環控制語句的配合)讀取字符串,又可以直接讀取從終端鍵入的字符串。

結合函數原型中的參數來解釋一下這個函數的用途:

從文件流(文件指針 stream)或標準輸入流(stdin)中最多讀取 n

- 1 個字符,并將它們存儲到以 s 為起始地址的內存空間里。

fgets 函數將在以下情況下,停止讀取:

1、在讀取過程中,遇到換行符 \n

2、在讀取過程中,遇到EOF

3、在讀取過程中,讀取的字符數達到最大限制(已經讀取了 n - 1 個)

如果函數執行成功,則返回 s,否則返回 NULL。

fgets 在成功讀取字符后,讀取的字符串內容以及當前指針所處的狀態如下:

strA:目標字符串(如果數據源是文本流,則為 當前行)

strB:讀取到的字符串內容

LEN:函數調用時指定的最大讀取字符數

情況一:當 strA 的長度?大于?LEN?時

strB 為:從?strA?開始處獲取到的 LEN?- 1 個字符

指針狀態:指針偏移至當前讀取完的這個字符之后的位置

例如:

strA?長度為10,LEN 為?5,此時 strB?的內容為 strA?的前4個(取

LEN?- 1 個)字符,指針指向 strA 的第5個字符處。

當下一次調用 fgets 函數時,會從 strA 的第5個字符開始讀取。

情況二:當 strA + 2(一個字符長度用于存儲在終端鍵入回車后 or strA 自身(行尾,如果是文本流)的換行符

\n,另一個字符長度用于存儲字符串本身的結束標識 \0)?的長度?小于?LEN?時

strB 為:strA + 行尾或終端鍵入回車后的換行符 \n,以及自動追加的字符串結束符 \0

指針狀態:指針偏移至下一行

例如:

strA?長度為10,LEN 為 15,此時?strB?的內容為?strA\n\0。

fgets 函數的優點是:

1、讀取到的換行符被保存到讀取結果中

2、操作的數據源不僅限于標準輸入流 stdin

3、允許指定讀取字符串的最大長度,有效避免了緩沖區溢出的問題。

BTW:strlen() 的計算結果,是不包括結束符 \0 的~

原文:http://www.cnblogs.com/MyRobotDream/p/3548567.html

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

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

相關文章

Android下創建一個輸入法

輸入法是一種可以讓用戶輸入文字的控件。Android提供了一套可擴展的輸入法框架,使得應用程序可以讓用戶選擇各種類型的輸入法,比如基于觸屏的鍵盤輸入或者基于語音。當安裝了特定輸入法之后,用戶即可在系統設置中選擇個輸入法,并在…

linux awk f,linux的awk詳情(上)

一丶awk介紹AWK是一種處理文本文件的語言,是一個強大的文本分析工具,可以報告生成器,格式化文本輸出1.常用語法awk [options] ‘program’ varvalue file…awk [options] -f programfile varvalue file…awk [options] BEGIN{ action;… } pa…

C#的async和await

C# 5.0中引入了async 和 await。這兩個關鍵字可以讓你更方便的寫出異步代碼。 看個例子&#xff1a; public class MyClass {public MyClass(){DisplayValue(); //這里不會阻塞System.Diagnostics.Debug.WriteLine("MyClass() End.");}public Task<double> Get…

eclipse創建android工程,在eclipse創建android 工程

1.在工具欄選擇"New".在彈出對話框里&#xff0c;開打android文件夾&#xff0c;選擇"android application Project"&#xff0c;選擇“Next”.2.Application Name: 應用程序名稱。Projetc Name: 工程名稱。Packet Name: 包名稱. 注意&#xff0c;包名稱…

SQL select查詢原理--查詢語句執行原則轉

1.單表查詢&#xff1a;根據WHERE條件過濾表中的記錄&#xff0c;形成中間表&#xff08;這個中間表對用戶是不可見的&#xff09;&#xff1b;然后根據SELECT的選擇列選擇相應的列進行返回最終結果。 1)簡單的單表查詢 SELECT 字段 FROM 表名 WHERE 條件表達式 那它們是按什么…

android導航二級分類,Android實現騰訊新聞的新聞類別導航效果

效果圖如下所示&#xff1a;1、在Adapter中加入如下代碼private int clickTemp -1;//TODO 被選擇的item下標/** * TODO 傳入下標&#xff0c;設置被選擇的item * * param position */public void setSelection(int position) {clickTemp position;}2、在Adapter的getView方法…

Linux下訪問window掛載的磁盤

點擊window掛在的磁盤,如下圖左側"文檔". 出現如下錯誤: Error mounting /dev/sda3 .... Command-line mount -t "ntfs" -o "uhelperudisks2 修復辦法: sudo ntfsfix /dev/sda6 參考資料: 1. win8安裝ubuntu后不能訪問windows其他磁盤轉載于:https:…

linux遍歷目錄源代碼

<pre code_snippet_id"1622396" snippet_file_name"blog_20160324_1_744516" name"code" class"cpp">遍歷目錄獲取整個目錄的占用空間: uint64_t dir_space(char *path) {int ret 0;uint64_t space 0;char cur_dir[PATH_MAX …

android studio 手動安裝gradle,Android Studio 如何安裝Gradle?

今天新下載安裝了Android Studio 2.1&#xff0c;啟動并新建第一個項目&#xff0c;結果卡在 gradle 上。網上搜原因&#xff0c;得到這個網頁&#xff1a;http://blog.csdn.net/maxsky/article/details/50204093。說是要自己下載 gradle的壓縮包&#xff0c;查了項目目錄下的 …

Label 表達式綁定

Text<%#"總金額為: "Convert.ToString(Convert.ToDecimal(TextBox1.Text)*Convert.ToInt32(TextBox2.Text)%> Page_Load { Page.DataBind(); }轉載于:https://www.cnblogs.com/handsomer/p/4150386.html

(轉)如果知道dll文件是面向32位系統還是面向64位系統的?

本文為轉載文章&#xff0c;原文地址&#xff1a;http://www.cnblogs.com/qguohog/archive/2011/09/13/2174897.html&#xff0c;僅僅是記錄供后續使用&#xff0c;如有侵權請通知刪除。 在發布dll時&#xff0c;可以選擇編譯為x86模式、x64模式以及Any Cpu模式等。那么對于已經…

Spring Roo 簡介

一直以來&#xff0c;Java/Spring開發被認為是笨重的代表&#xff0c;無法快速生成項目原型和骨架。所以&#xff0c;Spring推出了Spring Roo這個項目&#xff0c;幫助我們快速生成項目原型。本文參考自Spring Roo的官方文檔&#xff0c;如果熟悉英文的話可以直接看原文檔&…

雙緩沖 android,Android 的 SurfaceView 雙緩沖應用

075 int index 0;本文引用地址&#xff1a;http://www.eepw.com.cn/article/201610/305442.htm076 try {077 index field.getInt(R.drawable.class);078 } catch (IllegalArgumentException e) {079 // TODO Auto-generated catch block080 e.printStackTrace();081 } catch …

Windows—JDK安裝與環境變量配置

本文介紹JDK的安裝與環境變量配置。 工具/原料 JDK1.8.0_65WIN7 32bitjdk-8u65-windows-i586.exe方法/步驟 安裝JDK 選擇安裝目錄 安裝過程中會出現兩次 安裝提示 。第一次是安裝 jdk &#xff0c;第二次是安裝 jre 。建議兩個都安裝在同一個java文件夾中的不同文件夾中。&…

典型案例道出“服務臺”的價值

引 言&#xff1a;作為運營管理著龐大IT系統的CIO&#xff0c;相信您或多或少都嘗試過&#xff0c;或正建有IT服務臺&#xff08;或幫助臺&#xff09;&#xff0c;然而您可能依然面臨服務效率低下&#xff0c;用戶滿意度欠佳的 困擾。這其中的原因&#xff0c;多半就在于您的服…

數據的藝術

數據的藝術概念:數據 --程序操作的對象&#xff0c;用于描述客觀事物。數據的特點:a. 可以輸入到計算機b. 可以被計算機程序處理*數據是一個抽象的概念&#xff0c;將其進行分類得到程序設計語言中的類型。數據元素 -組成數據的基本單位a. 數據項:一個數據元素由若干數據項組成…

處理ajax的session超時

做web開發時&#xff0c;當session超時時&#xff0c;如果不是ajax請求&#xff0c;很簡單就能實現跳到指定的頁面。但是ajax請求就會有問題。session超時的時候&#xff0c;點擊到ajax請求就會彈出一些頁面源碼文件。 首先建了個攔截器&#xff0c;來判斷session超時。用戶登錄…

菜根譚#249

色欲火熾&#xff0c;而一念及病時便興似寒灰&#xff1b; 名利飴甘&#xff0c;而一想到死地便味如嚼蠟。 故人常憂死慮病&#xff0c;亦可消幻業而長道心。轉載于:https://www.cnblogs.com/star4knight/p/4154590.html

實現物聯網項目,你需要提前知道的6件事情

目前為止&#xff0c;對于大多數尋求數字化與服務化轉型的制造商來說&#xff0c;實現物聯網應用項目仍然是一個很大的挑戰。 我們此前做過一項研究&#xff0c;到2016年底,全球企業級物聯網項目將超過10000個。但是其中大部分的項目都還是處于初期概念驗證(PoC)階段&#xff0…

android腳本快捷方式,Android:如何創建主屏幕快捷方式啟動shell腳本?

答案&#xff1a;您的問題的答案應該是GScript(開放源代碼和“根除設備上的任何地方”),但是當腳本完成時,誰想要盯著該模態終端輸出屏幕&#xff1f;詳情如下.> SManager (free version)將讓您將自定義腳本存儲在設備的任何位置,即使您使用根設備的內部存儲也是如此.它將允…