fgets()函数可以防止存储溢出,为什么?

wendy_welcom 2007-12-07 11:06:27
fgets()函数可以防止存储溢出,为什么?
...全文
567 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
ttlyfast 2007-12-07
  • 打赏
  • 举报
回复

从低级文件函数打开的文件或通信端口中返回一连串字节,直至遇到回车符。

语法

FGETS(nFileHandle [, nBytes])

参数

nFileHandle

指定一个数值型文件句柄,FGETS( ) 函数根据此句柄,从相应的文件或通信端口返回数据。

nBytes

指定由 FGETS( ) 函数返回的字节数。如果在此之前没有遇到回车符,FGETS( ) 函数返回 nBytes 个字节。如果回车符在 nBytes 个字节当中,则 FGETS( ) 函数返回文件指针起始位置与回车符之间的数据。
如果省略 nBytes,则 FGETS( ) 函数默认最多可返回 254 个字节。

返回值类型
字符型

说明
通过使用一串 FGETS( ) 函数,可以逐行阅读文件。
FGETS( ) 函数将一串字节作为单个字符串返回,所返回的数据从文件指针的当前位置开始,直至遇到回车符为止,此时文件指针将定位在紧接此回车符的字节上。回车符不包含在所返回的字节中,其中的换行符也被放弃。

如果省略 nBytes,则 FGETS( ) 函数默认最多可返回 254 个字节。
alen88 2007-12-07
  • 打赏
  • 举报
回复
fgets()可以接受用来限制读入字符数目的大小参数,如:fgets(str,n,fp);是从fp所指的文件中读出n-1个字符送入字符数组str中。
ttlyfast 2007-12-07
  • 打赏
  • 举报
回复
自己跟踪看看89明白挖?
wendy_welcom 2007-12-07
  • 打赏
  • 举报
回复
thanks :-)
就呆在云上 2007-12-07
  • 打赏
  • 举报
回复
相反gets这个函数是不安全的
它就相当容易溢出的呵呵
就呆在云上 2007-12-07
  • 打赏
  • 举报
回复
可以的
因为他的原型是:
char *fgets(
char *str,
int n,
FILE *stream
);
从一个文件里面读取制定数目的文字到str中取

这样就防止了你的输入超出字符串的限度

chlaws 2007-12-07
  • 打赏
  • 举报
回复
fgets(str,n,fp)//n控制了字符长度
源码链接: https://pan.quark.cn/s/418996522941 ### fgets函数详解#### 函数概述`fgets`是一种常用于C/C++程序设计中的函数,其作用是从文件或标准输入中获取字符串。该函数能够高效地读取单行或多行文本,并且支持对读取长度的限定,以此防止出现缓冲区溢出等问题。#### 函数原型```cchar *fgets(char *buf, int bufsize, FILE *stream);```#### 参数说明- **buf**:字符型指针,其指向用于存储读取数据的目标字符数组的首地址。- **bufsize**:整型数据,代表目标字符数组`buf`的容量。这个参数决定了`fgets`函数最多能够读取多少个字符。- **stream**:文件结构体指针,其指向将从中获取数据的文件流。通常情况下,它可以通过`fopen`函数打开的文件或其他标准输入如`stdin`。#### 返回值- 在函数读取成功的情况下,会返回一个指向`buf`的指针。- 若遇到文件结束标记EOF或出现错误,则函数会返回`NULL`。#### 功能描述`fgets`函数的核心作用是从指定的文件流`stream`中读取一行文本数据。每次进行读取操作时,最多可以读取`bufsize - 1`个字符,并在字符串的末尾自动添加一个空字符`\0`作为结束标志。这意味着即使`bufsize`的值很大,`fgets`也只会读取到换行符`\n`或文件结束符EOF为止。#### 文件流指针偏移原理在使用`fgets`读取文件时,文件流指针的移动遵循以下规则:- 在首次读取时,指针会从文件的开头开始读取,直到读取完一行或者达到`bufsize - 1`的限制。-...

70,037

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧