fgets和scanf的區別

2021-06-20 13:43:00 字數 1135 閱讀 3597

1、測試使用scanf的乙個例子:

#include "stdio.h"

#include "string.h"

int main()

編譯、呼叫如下:

可以看到第二次,由於輸入的字串長度,導致abort

2、同樣的乙個fgets的例子:

#include "stdio.h"

#include "string.h"

int main()

編譯、呼叫如下:

並沒有像scanf那樣出現abort的情況,而是對字串進行了截斷

3、對比scanf和fgets:

a) scanf不限制使用者的輸入,導致會出現上面測試例子的abort

fgets限制使用者的輸入,超過之後進行截斷字串的操作,避免了abort,但是要設定乙個緩衝區長度值

b) scanf可以使用諸如scanf("%d/%d", &x, &y),這樣的形式,讓使用者只需要輸入1/3便可以分別得到x、y的值:

#include "stdio.h"

int main()

但是fgets,無論如何,每次都只能讀入乙個變數,而且只能是字串(畢竟說是str嘛!),像下面這樣的形式,編譯是通不過的:

c)字串中的空格

scanf用%s接收字串的時候,遇到空格就會停止。如果想輸入多個單詞,需要多次呼叫scanf()

fgets()直接接收字串中的空格

4、總結

由於3提到的一些區別,所以在使用scanf()和fgets()的時候,要注意情況。

fread和 fgets的區別

fread 和fgets 的區別 fread 以位元組位計算長度 按照指定的長度和次數讀取資料 遇到結尾或完成指定長度讀取後停止 fgets 整行讀取 遇到回車換行或結尾停止 在文字方式時使用.讀字串函式 fgets 函式的功能是從指定的檔案中讀乙個字串到字元陣列中,函式呼叫的形式為 fgets 字...

fgets和gets的區別

在程式設計中發現gets 和fgets 一些區別總結一下 1 fgets比 gets 安全,使用 gets 編譯時會警告 為了安全,gets 少用,因為其沒有指定輸入字元的大小,限制輸入緩衝區得大小,如果輸入的字元大於定義的陣列長度,會發生記憶體越界,堆疊溢位。後果非常怕怕 fgets會指定大小,如...

fgets()和gets()的區別

區別如下 1 fgets 函式的第2個引數指明了讀入字元的最大數量。如果該引數的值是n,那麼fgets 將讀入n 1個字元,或者讀到遇到的第乙個換行符為止 2 如果fgets 讀到第乙個換行符,會把它儲存在字串中。這點和gets 不同,gets 會丟棄換行符 3 fgets 函式的第3個引數指明要讀...