天天看點

gets與fgets的差別

簡單來說

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;
}
           

編譯運作結果如下

gets與fgets的差別
gets與fgets的差別

繼續閱讀