C說話的getc()函數和gets()函數的應用比較。本站提示廣大學習愛好者:(C說話的getc()函數和gets()函數的應用比較)文章只能為提供參考,不一定能成為您想要的結果。以下是C說話的getc()函數和gets()函數的應用比較正文
C說話getc()函數:從流中讀取字符
頭文件:
#include <stdio.h>
函數getc()用於從流中取字符,其原型以下:
int getc(FILE *stream);
【參數】參數*steam為要從中讀取字符的文件流。
【前往值】該函數履行勝利後,將前往所讀取的字符。
【解釋】若從一個文件中讀取一個字符,讀到文件尾而有數據時便前往EOF。getc()與fgetc()感化雷同,但在某些庫中getc()為宏界說,而非真實的函數。
【實例】上面的示例演示了getc()函數的應用,在法式中采取該函數從尺度輸出掌握台中讀取字符,代碼以下。
#include <stdio.h> //引入尺度輸出輸入庫 void main( ) { char ch; printf ("Input a character: "); //輸出提醒信息 ch = getc(stdin); // 從尺度輸出掌握台中讀取字符 printf ("The character input was: '%c'\n", ch); // 輸入字符 }
運轉上述法式,起首聲明一個用於保留所取字符的變量;然後輸 出提醒信息,吸收從尺度輸出掌握台按下的隨意率性鍵,並將該字符輸入到掌握台。
應用getc()從文件中讀取字符串,代碼以下。
#include<stdio.h> #include<string.h> #include<stdlib.h> int main(void) { int ch; int len; int i=0; FILE* fstream; char msg[100] = "Hello!I have read this file."; fstream=fopen("test.txt","at+"); if(fstream==NULL) { printf("read file test.txt failed!\n"); exit(1); } /*getc從文件流中讀取字符*/ while( (ch = getc(fstream))!=EOF) { putchar(ch); } putchar('\n'); len = strlen(msg); while(len>0)/*輪回寫入*/ { putc(msg[i],fstream); putchar(msg[i]); len--; i++; } fclose(fstream); return 0; }
函數fopen應用形式“at+”翻開文本文件,應用getc從文件流中逐一讀取字符,直到讀完。
C說話gets()函數:從流中讀取字符串
頭文件:
#include <stdio.h>
gets()函數用於從緩沖區中讀取字符串,其原型以下:
char *gets(char *string);
gets()函數從流中讀取字符串,直到湧現換行符或讀到文件尾為止,最初加上NULL作為字符串停止。所讀取的字符串暫存在給定的參數string中。
【前往值】若勝利則前往string的指針,不然前往NULL。
留意:因為gets()不檢討字符串string的年夜小,必需碰到換行符或文件開頭才會停止輸出,是以輕易形成緩存溢出的平安性成績,招致法式瓦解,可使用fgets()取代。
【實例】請看上面一個簡略的例子。
#include <stdio.h> int main(void) { char str[10]; printf("Input a string.\n"); gets(str); printf("The string you input is: %s",str); //輸入一切的值,留意a }
假如輸出123456(長度小於10),則輸入成果為:
Input a string. 123456↙ The string you input is:123456
假如輸出12345678901234567890(長度年夜於10),則輸入成果為:
Input a string. 12345678901234567890↙ The string you input is:12345678901234567890
同時看到體系提醒法式曾經瓦解。
假如不克不及准確應用gets()函數,帶來的傷害是很年夜的,就如下面我們看到的,輸出字符串的長度年夜於緩沖區長度時,並沒有截斷,原樣輸入了讀入的字符串,形成法式瓦解。
斟酌到法式平安性和硬朗性,建議用fgets()來取代gets()。
假如你在GCC中應用gets(),編譯沒法經由過程,會提醒:
the 'gets' function is dangerous and shout not be used.
C說話gets()函數:從流中讀取字符串
頭文件:
#include <stdio.h>
gets()函數用於從緩沖區中讀取字符串,其原型以下:
char *gets(char *string);
gets()函數從流中讀取字符串,直到湧現換行符或讀到文件尾為止,最初加上NULL作為字符串停止。所讀取的字符串暫存在給定的參數string中。
【前往值】若勝利則前往string的指針,不然前往NULL。
留意:因為gets()不檢討字符串string的年夜小,必需碰到換行符或文件開頭才會停止輸出,是以輕易形成緩存溢出的平安性成績,招致法式瓦解,可使用fgets()取代。
【實例】請看上面一個簡略的例子。
#include <stdio.h> int main(void) { char str[10]; printf("Input a string.\n"); gets(str); printf("The string you input is: %s",str); //輸入一切的值,留意a }
假如輸出123456(長度小於10),則輸入成果為:
Input a string. 123456↙ The string you input is:123456假如輸出12345678901234567890(長度年夜於10),則輸入成果為:
Input a string. 12345678901234567890↙ The string you input is:12345678901234567890同時看到體系提醒法式曾經瓦解。
假如不克不及准確應用gets()函數,帶來的傷害是很年夜的,就如下面我們看到的,輸出字符串的長度年夜於緩沖區長度時,並沒有截斷,原樣輸入了讀入的字符串,形成法式瓦解。
斟酌到法式平安性和硬朗性,建議用fgets()來取代gets()。
假如你在GCC中應用gets(),編譯沒法經由過程,會提醒:
the 'gets' function is dangerous and shout not be used.