标准I/O库函数:fgets与gets比较分析

[09-12 18:27:08]   来源:http://www.88dzw.com  EDA/PLD   阅读:8596

文章摘要:函数名:fgets功能:从流中读取一个字符串用法:char *fgets(char *string,int n,FILE *stream);形参注释:*string:结果数据的首地址;n-1:一次读入数据块的长度,其默认值为1k,即1024;stream文件指针,指向一个文件函数说明:fgets()用来从参数stream所指的文件内读入字符并存到参数s所指的内存空间,直到出现换行字符、读到文件尾或是已读了size-1个字符为止,最后会加上NULL作为字符串结束。如果在未读满n-1个字符之时,已读到一个换行符或一个EOF(文件结束标志),则结束本次读操作,读入的字符串中最后包含读到的换行符。示例

标准I/O库函数:fgets与gets比较分析,标签:eda技术,eda技术实用教程,http://www.88dzw.com

  函数名:fgets

  功能:从流中读取一个字符串

  用法:char *fgets(char *string,int n,FILE *stream);

  形参注释:

  *string:结果数据的首地址;n-1:一次读入数据块的长度,其默认值为1k,即1024;stream文件指针,指向一个文件

  函数说明:

  fgets()用来从参数stream所指的文件内读入字符并存到参数s所指的内存空间,直到出现换行字符、读到文件尾或是已读了size-1个字符为止,最后会加上NULL作为字符串结束。

  如果在未读满n-1个字符之时,已读到一个换行符或一个EOF(文件结束标志),则结束本次读操作,读入的字符串中最后包含读到的换行符。

  示例:

  #include <string.h>

  #include <stdio.h>

  int main(void)

  {

  FILE *stream;  //FILE 是一种数据类型,是管理文件流的一种结构

  char string[] = "This is a test";

  char msg[20];

  /* open a file for update */

  stream = fopen("DUMMY.FIL", "w+");

  /* write a string into the file */

  fwrite(string, strlen(string), 1, stream);

  /* seek to the start of the file */

  fseek(stream, 0, SEEK_SET);

  /* read a string from the file */

  fgets(msg, strlen(string)+1, stream);

  /* display the string */

  printf("%s", msg);

  fclose(stream);

  return 0;

  }

  代码分析:

  操作成功时返回的是msg的值,如果碰到文件结束或错误的时候,fgets返回null;因为输入的过程中一般只会按下回车,很少会是EOF的,所以不会是碰到文件结束,而错误是当你传入msg是NULL的时候才会遇到,所以基本上是不可能返回NULL的。而且输入超过了长度n的时候,fgets会自动截断的,属于操作成功。

  函数名:gets

  功能:从stdin流中读取字符串,直至接受到换行符或EOF时停止,并将读取的结果存放在str指针所指向的字符数组中。换行符不作为读取串的内容,读取的换行符被转换为null值,并由此来结束字符串。

  示例:

  #include"stdio.h"

  void main()

  {

  char str1[5];

  gets(str1);

  printf("%s\n",str1);

  }

  注意:本函数可以无限读取,不会判断上限,所以程序员应该确保str的空间足够大,以便在执行读操作时不发生溢出。

  代码分析:

  用gets函数时,编译器会有报警提示,因为gets函数不安全,没有限制输入缓冲区的大小,容易造成溢出。这就好像养金鱼,你投多少鱼食它就吃多少,自己不知道控制,但它的胃容量是有上限的(默认值),喂的太多金鱼就会撑死(溢出)。

  总结:

  1 尽量不使用gets

  2 内存越界是有问题隐患,但并不是一定会体现出问题,要看具体情况。



Tag:EDA/PLDeda技术,eda技术实用教程EDA/PLD

《标准I/O库函数:fgets与gets比较分析》相关文章

分类导航
最新更新
热门排行