一.前言
1.行I/O可以用兩種方式執行—未格式化的或格式化的。這兩種形式都用於操作字符串。
2.未格式化的I/O:簡單讀取或寫入字符串,而格式化的I/O則執行數字和其他變量的內部和外部表示形式之間的轉換。
二.未格式化I/O
1.未格式化I/O函數聲明
1>char *fgets(char *buffer,int buffer_size,FILE *stream);
2>char *gets(char *buffer);
3>int fputs(char const *buffer,FILE *stream);
4>int puts(char const *buffer);
1.gets和puts函數家族是用於操作字符串而不是單個字符。
2.fgets從指定的stream讀取字符並把它們復制到buffer中。當它讀取一個換行符並存儲到緩沖區之後就不再讀取。如果緩沖區內存儲字符數到達buffer_size-1時它也停止讀取。
1>在任何一種情況下,一個NUL字節將被添加到緩沖區所存儲數據的末尾,使它成為一個字符串。
2>如果在任何字符讀取前就到達了文件尾,緩沖區就未進行修改,fgets函數返回一個NULL指針。否則fgets返回它的第一個參數(指向緩沖區的指針)。這個返回值通常只用於檢查是否到達了文件尾。
3.傳遞給fputs的緩沖區必須包含一個字符串,它的字符被寫入到流中。這個字符串以NUL字節結尾,所以這個函數沒有一個緩沖區長度參數。這個字符串是逐字寫入的:如果它不包含一個換行符,就不會寫如換行符。如果它包含了好幾個換行符,所有的換行符都會被寫入。因此,當fgets每次都讀取一整行時,fputs既可以一次寫如一行的一部分,也可以一次寫入一整行,甚至可以一次寫入好幾行。如果寫入時出現了錯誤,fputs返回常量值EOF,否則它將返回一個非負值。
4.gets和puts函數幾乎和fgets 與fputs相同。他們之間的一個主要區別是:
1>當gets讀取一行輸入時,它並不在緩沖區中存儲結尾的換行符。當puts寫入一個字符串時,它在字符串寫入之後向輸出再添加一個換行符。
2>另一個區別僅僅在於gets,它沒有緩沖區長度參數。因此gets無法判斷緩沖區的長度。