C語言中文網 目錄

fputs函數,C語言fputs函數及其用法詳解

fputs() 函數也是用來顯示字符串的,它的原型是:

# include <stdio.h>
int fputs(const char *s, FILE *stream);

s 代表要輸出的字符串的首地址,可以是字符數組名或字符指針變量名。

stream 表示向何種流中輸出,可以是標準輸出流 stdout,也可以是文件流。標準輸出流即屏幕輸出,printf 其實也是向標準輸出流中輸出的。

fputs() 和 puts() 有兩個小區別:
  1. puts() 只能向標準輸出流輸出,而 fputs() 可以向任何流輸出。
  2. 使用 puts() 時,系統會在自動在其后添加換行符;而使用 fputs() 時,系統不會自動添加換行符。

那么這是不是意味著使用 fputs() 時就要在后面添加一句“printf("\n");”換行呢?看情況!如果輸入時使用的是 gets(),那么就要添加 printf 換行;但如果輸入時用的是 fgets(),則不需要。

因為使用 gets() 時,gets() 會將回車讀取出來并丟棄,所以換行符不會像 scanf 那樣被保留在緩沖區,也不會被 gets() 存儲;而使用 fgets() 時,換行符會被 fgets() 讀出來并存儲在字符數組的最后,這樣當這個字符數組被輸出時換行符就會被輸出并自動換行。

但是也有例外,比如使用 fgets() 時指定了讀取的長度,如只讀取 5 個字符,事實上它只能存儲 4 個字符,因為最后還要留一個空間給 '\0',而你卻從鍵盤輸入了多于 4 個字符,那么此時“敲”回車后換行符就不會被 fgets() 存儲。數據都沒有地方存放,哪有地方存放換行符呢!此時因為 fgets() 沒有存儲換行符,所以就不會換行了。

下面寫一個程序驗證一下:
# include <stdio.h>
int main(void)
{
    char str[20];  /*定義一個最大長度為19, 末尾是'\0'的字符數組來存儲字符串*/
    printf("請輸入一個字符串:");
    fgets(str, 19, stdin);  /*從輸入流stdin中讀取19個字符到字符數組str中*/
    fputs(str, stdout);  //將字符數組的內容輸出到輸出流stdout中
    return 0;
}
輸出結果是:
請輸入一個字符串:i love you
i love you
Press any key to continue

我們看到讀取 19 個字符足夠存儲“i love you”,所以 fgets() 最后會存儲換行符。這樣 fputs() 輸出時這個換行符就能換行了。

下面再將讀取的字符改小一點看看:
# include <stdio.h>
int main(void)
{
    char str[20];  /*定義一個最大長度為19, 末尾是'\0'的字符數組來存儲字符串*/
    printf("請輸入一個字符串:");
    fgets(str, 5, stdin);  //從輸入流stdin中讀取4個字符到字符數組str中
    fputs(str, stdout);  //將字符數組的內容輸出到輸出流stdout中
    return 0;
}
輸出結果是:
請輸入一個字符串:i love you
i loPress any key to continue

我們看到并沒有換行。

值得說明的是,雖然 gets()、fgets()、puts()、fputs() 都是字符串處理函數,但它們都包含在 stdio.h 頭文件中,并不是包含在 string.h 頭文件中。

精美而實用的網站,提供C語言C++STLLinuxShellJavaGo語言等教程,以及socketGCCviSwing設計模式JSP等專題。

Copyright ?2011-2018 biancheng.net, 陜ICP備15000209號

底部Logo