c語言getc
Ⅰ 6.16 c語言,getchar gets getc有什麼區別 分別是表示什麼的
區分C語言中getch、getche、fgetc、getc、getchar、fgets、gets首先,這兩個函數不是C標准庫中的函數,
int getch(void)//從標准輸入讀入一個字元,當你用鍵盤輸入的時候,屏幕不顯示你所輸入的字元。也就是,不帶回顯。
int getche(void) //從標准輸入讀入一個字元,鍵盤輸入的時候,屏幕顯示所輸入的字元。帶回顯。
這兩個函數包含在頭文件conio.h中,需要記住的是conio.h不是C標准庫中的頭文件。Micorsoft 和 Borland的 C編譯器提供了conio.h,用來創建控制台文本用戶界面。一般在Windows系統下安裝了VS、VC等,就可以包含conio.h頭文件。但是一般在Unix、Linux系統中,/usr/include/中都沒有這個頭文件。
getch和getche在等待用戶從鍵盤輸入的時候,用戶按下一個鍵後,不需要按回車,程序自動往下執行。在Linux中,終端輸入在預設情況下是被「一鍋端」的,也就是說整行輸入是被一起處理的。通常,這是一種人們所希望的方便的辦法,但它也意味著在讀入數據時必須按一下回車鍵表示輸入行結束後才能得到輸入的數據。在游戲中,很多都提供了「老闆鍵」,它的實現,就是利用了這兩個函數。
其次,除了getch和getche,其他的都是C標准庫中的頭文件,包含在頭文件stdio.h中。
int fgetc ( FILE * stream ); //從流stream中讀一個字元。可以將標准輸入stdin作為它的實參,這時候從標准輸入讀取一個字元。int getc(FILE * stream); //和fgetc等效,由fgetc通過宏實現。int getchar ( void ); //從標准輸入stdin讀入一個字元,程序等待你輸入的時候,你可以輸入多個字元,回車後程序繼續執行。 //但getchar只讀入一個字元說明:getc、getchar都是通過宏定義藉助fgetc實現。如getchar的實現為,#define getchar() fgetc(stdin)。 char * fgets (char * str, int num, FILE *stream); //從流stream中讀入最多num個字元到字元數組str中,當遇到換行符時、或讀到num-1個字元時停止。 //自動加上'\0'空字元結尾char * gets ( char * str );//從標准輸入stdin讀取一個字元串,遇到換行或結束時候終止。 //不同於fgets,他沒有指定num,所以需要注意字元數組str的大小。 說明: fgets和gets之間沒有宏定義的關系,彼此各自有自己的實現。蠕蟲病毒的實現就是函數gets的「功勞」。gets函數的任務是從流中讀入一個字元串。它的調用者會告訴它把讀入的字元串放在什麼地方。但是,gets()函數並不檢查緩沖區大小,如果調用者提供了一個指向堆棧的指針,並且get()函數讀入的字元數量超過了超過了緩沖區的空間大小,get()會愉快地將多出來的字元繼續寫入到堆棧中,這就覆蓋了堆棧中原來的內容。如:main()
{
char line[512]; //在程序的堆棧上分配512個字元的空間
...
gets(line); //蠕蟲病毒的入口,可以將惡意代碼通過多出來的數據寫入堆棧
}
建議不要用getch和getche,因為它們不是C標准庫中的函數。用它們寫出的程序可移植性差,不同的編譯器不保證可以包含conio.h。建議用fgets函數徹底替代gets函數。
Ⅱ c語言中fgetc和getc與fputc和putc的區別是什麼
c語言中fgetc和getc與fputc和putc的區別如下:
fgetc是從數據流中取一個字元,比如從一個打開的文件中取一個字元
fputc是將一個字元送入到一個數據流中,比如王一個打開的文件中寫入一個字元
getc是從鍵盤中獲取一個字元
putc是往屏幕送一個字元