gets與fgets的區別
阿新 • • 發佈:2018-12-22
簡單來說
gets——從標準輸入接收一串字元,遇到’\n’時結束,但不接收’\n’,把 ‘\n’留存輸入緩衝區;把接收的一串字元儲存在形式引數指標指向的空間,並在最後自動新增一個’\0’。
getchar——從標準輸入接收一個字元返回,多餘的字元全部留在輸入緩衝區。
fgets——從檔案或標準輸入接收一串字元,遇到’\n’時結束,把’\n’也作為一個字元接收;把接收的一串字元儲存在形式引數指標指向的空間,並在’\n’後再自動新增一個’\0’。
綜上,gets是接收一個不以’\n’結尾的字串,getchar是接收任何一個字元(包括’\n’),fgets是接收一個以’\n’結尾的字串。
在man手冊中得到資訊
#include <stdio.h>
char *fgets(char *s, int size, FILE *stream);
char *gets(char *s);
gets中的引數s 是讀取鍵盤輸入的字串
而且無法讀取換行符
空格和符號都能讀到
fgets就是從特定的流中讀取字串
需要注意的是,用gets的時候肯定要先動態分配記憶體
附上一段程式碼
#include<stdio.h> #include <stdlib.h> #include <string.h> int main() { /* FILE *fp=fopen ("./1.txt","r"); if(fp==NULL) perror("[err]"); */ FILE *fp2=fopen ("./txt2","w"); if(fp2==NULL) perror("[err]"); char *ch; int i; ch=(char *)malloc(10*sizeof(char)); for(i=0;i<5;i++) { gets(ch); printf("the strength is %d\n",strlen(ch)); (void)fputs(ch,fp2); } fclose(fp); return 0; }
編譯執行結果如下