1. 程式人生 > >gets與fgets的區別

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

編譯執行結果如下
在這裡插入圖片描述

在這裡插入圖片描述