当前位置:首页 > 工业控制 > 电子设计自动化
[导读]函数名:fgets 功能:从流中读取一个字符串 用法:char *fgets(char *string,int n,FILE *stream); 形参注释: *string:结果数据的首地址;n-1:一次读入数据块的长度,其默认值为1k,即1024;stream文件指针,指向一

函数名: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("%sn",str1);

}

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

代码分析:

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

总结:

1 尽量不使用gets

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



来源:miaomi2次

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

随着无人机的普及,越来越多的人开始使用无人机进行各种飞行任务,但是不当的使用会给公共安全和社会秩序带来潜在的风险,因此对于无人机使用的规定也变得越来越严格。本文将介绍无人机使用的标准和规定,以帮助大家正确使用无人机。

关键字: 无人机 标准 UAV

智能家居作为新兴领域,逐渐走入了人们的生活。智能家居系统是利用先进的计算机技术、网络通讯技术、智能云端控制、综合布线技术、医疗电子技术依照人体工程学原理,融合个性需求,将与家居生活有关的各个子系统如安防、灯光控制、窗帘控...

关键字: 智能家居 标准

因为5G涵盖内容更丰富,上述三个5G专利池侧重点也不同:Avanci侧重汽车和物联网;Sisvel侧重手机等终端领域;Alium侧重无线接入网RAN。

关键字: 5G 标准 必要专利

为了保证航天型号元器件的固有质量和使用质量满足航天工程的要求,需要制定一系列标准和文件,规范元器件的选择、采购和应用。这一系列标准和文件按照其内在联系形成的科学有机整体就是元器件标准体系。

关键字: 电子 标准

ISO26262是汽车的一个安全性国际标准。目前我国也在积极参与中。是行业标准的一种。

关键字: iso26262 标准

这篇文章想分享笔者在嵌入式开发过程中常用的库函数,他们的使用方法,使用场景,使用好处以及头文件位置。1#include一般我在写C代码的时候都会包含此头文件,因为一旦包含此文件后,你就可以畅快的使用bool数据类型,而不...

关键字: 库函数

关注、星标公众号,直达精彩内容来源:知乎作者:Clarence这篇文章想分享笔者在嵌入式开发过程中常用的库函数,他们的使用方法,使用场景,使用好处以及头文件位置。1#include一般我在写C代码的时候都会包含此头文件,...

关键字: 库函数

基本概念阐述memcpy和memmove都是C语言的库函数,相比于 strcpy和 strncpy只能针对于字符类型的数组(),这两个函数可以拷贝其他类型的数组,对于 memcpy和 memmove的区别是什么呢?这里,...

关键字: 库函数 ov

在嵌入式Linux的C语言开发中,C语言的基本编程依然是最重要的内容。

关键字: 嵌入式 C语言 库函数

摘 要:我们国家从今年开始,正式成立了国家智慧城市标准化协调推进主体,这标志着我们国家智慧城市标准工作正式开始启动。具体工作由国家智慧城市标准化工作组来负责,一个是国际化标准工作组,另外一个是基础工作组,这两个已经启动。...

关键字: 关键词 物联网 智慧城市 标准 评价体系
关闭
关闭