簡單來說
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;
}
編譯運作結果如下