fgets()和gets()函数的区别

1、fgets比gets安全!

为了安全,gets少用,因为其没有指定输入字符的大小,限制输入缓冲区得大小,如果输入的字符大于定义的数组长度,会发生内存越界,堆栈溢出。后果非常严重!

fgets会指定大小,如果超出数组大小,会自动根据定义数组的长度截断。

2、用strlen检测两者的输入的字符串长度,结果不一样

同样是输入123

gets只有一次换行,这是因为程序的语句printf(“%s\n”,str)

fgets有两次,而第二次是其本身把回车换行符存入了字符串里

所以,gets的长度只有3和输入的字符串长度一样,fgets是4,多出来的是回车换行符。

具体的介绍:

fgets函数fgets函数用来从文件中读入字符串。

fgets函数的调用形式如下:fgets(str,n,fp);此处,fp是文件指针;str是存放在字符串的起始地址;n是一个int类型变量。

函数的功能是从fp所指文件中读入n-1个字符放入str为起始地址的空间内;如果在未读满n-1个字符之时,已读到一个换行符或一个EOF(文件结束标志),则结束本次读操作,读入的字符串中最后包含读到的换行符。

因此,确切地说,调用fgets函数时,最多只能读入n-1个字符。读入结束后,系统将自动在最后加‘\0‘,并以str作为函数值返回。

gets()将删除新行符, fgets()则保留新行符。

要去掉fgets()最后带的“\0",只要用 s[strlen(s)-1]=‘\0‘;即可。

fgets不会像gets那样自动地去掉结尾的\n,所以程序中手动将\n位置处的值变为\0,代表输入的结束。

时间: 2024-10-06 05:58:41

fgets()和gets()函数的区别的相关文章

gets和fgets函数的区别

1. gets与fgets gets函数原型:char*gets(char*buffer);//读取字符到数组:gets(str);str为数组名. gets函数功能:从键盘上输入字符,直至接受到换行符或EOF时停止,并将读取的结果存放在buffer指针所指向的字符数组中. 读取的换行符被转换为null值,做为字符数组的最后一个字符,来结束字符串. 注意:gets函数由于没有指定输入字符大小,所以会无限读取,一旦输入的字符大于数组长度,就会发生内存越界, 从而造成程序崩溃或其他数据的错误. fg

fgets函数和fputs函数的区别

#include <stdio.h> #define MAXLINE 20 int main(void) { char line[MAXLINE]; while (fgets(line,MAXLINE,stdin)!=NULL && line[0] != '\n') fputs(line,stdout); return 0; } fgets()函数是用于存储输入的地址(char *类型).第二个参数为整型,表示输入字符串的最大长度.最后与一个参数是文件指针,指向要读取的文件 f

JQuery之JQuery的版本 JQuery入门 属性获取 JQuery就绪函数 JS文档就绪函数和JQuery文档就绪函数的区别 JS对象和JQuery对象的区别 关于$的使用 多个JS库的冲突解决方案

JQuery的版本 JQuery入门 属性获取 JQuery就绪函数 JS文档就绪函数和JQuery文档就绪函数的区别 JS对象和JQuery对象的区别 关于$的使用 多个JS库的冲突解决方案 JQuery的版本 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>jQuery的版本</title> <

存储过程和自定义函数的区别

1: 1)存储过程,功能强大,可以执行包括修改表等一系列数据库操作,也可以创建为 SQL Server 启动时自动运行的存储过程. 自定义函数,用户定义函数不能用于执行一组修改全局数据库状态的操作. 2)存储过程,可以使用非确定函数. 自定义函数,不允许在用户定义函数主体中内置非确定函数. 3)存储过程,主要是返回一个int状态结果,也可返回记录集. 自定义函数,可以返回表变量. 关于这个,很容易糊涂.存储过程,可以使用这样的形式来返回N多的结果: create procedure sp1  a

PHP strcmp,strnatcmp,strncmp函数的区别

字符串比较说明当s1<s2时,返回为负数当s1=s2时,返回值= 0当s1>s2时,返回正数 1 <?php 2 $str1 = 'str100'; 3 $str2 = 'str20'; 4 echo strcmp($str1, $str2)."<br>"; 5 //输出-1 6 echo strnatcmp($str1, $str2)."<br>"; 7 //输出1 8 echo strncmp($str1, $str2,

C++ sizeof操作符的用法和strlen函数的区别

摘要:本人首先介绍了C++中sizeof操作符的用法和注意事项,其次对比了和strlen的区别和使用,方便大家在写代码的时候查阅,和面试.笔试的时候复习. 目录: sizeof的用法: sizeof和strlen的区别: sizeof的用法: sizeof 是一种单目操作符,而不是函数.sizeof以字节形式给出操作数的存储空间. 操作数可以是一个表达式或在括号内的类型名.操作数的存储空间由操作数的类型决定. char str[]="hello"; char str1[100]; ch

jQuery height()、innerHeight()、outerHeight()函数的区别详解

jQuery height().innerHeight().outerHeight()函数的区别详解 在jQuery中,获取元素高度的函数有3个,它们分别是height(). innerHeight().outerHeight(). 与此相对应的是,获取元素宽度的函数也有3个,它们分别是width(). innerWidth().outerWidth(). 在这里,我们以height().innerHeight().outerHeight()3个函数为例,来详细介绍它们之间的区别. 下面我们以元

append()函数与html()函数的区别

append()函数与html()函数的区别:其实这两个函数的区别是蛮大的,比如append()函数可以向指定元素尾部追加元素对象,而html()函数就不可以.他们两者最为相似的功能,就是为指定元素设置html内容的时候.代码实例如下: <!DOCTYPE html><html> <head> <meta charset=" utf-8"> <meta name="author" content="ht

MySQL存储过程/存储过程与自定义函数的区别

语法: 创建存储过程: CREATE [definer = {user|current_user}] PROCEDURE sp_name ([ proc_parameter [,proc_parameter ...]]) [ characteristics..] routime_body 其中: proc_parameter : [IN|OUT|INOUT] parameter_name type 其中IN表示输入参数,OUT表示输出参数,INOUT表示既可以输入也可以输出:param_name