程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> C說話的getc()函數和gets()函數的應用比較

C說話的getc()函數和gets()函數的應用比較

編輯:關於C++

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.


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved