fgets阻塞 stdin 退出_fgets()用法笔记
为了避免缓冲区溢出,从终端读取输入时应当用fgets()代替gets()函数。
但是这也将带来一个问题,因为fgets()的调用格式是:
fgets (buf, MAX, fp)
fgets (buf, MAX, stdin)
buf是一个char数组的名称,MAX是字符串的最大长度,fp是FILE指针。
fgets()函数读取到它所遇到的第一个换行符的后面,或者读取比字符串的最大长度少一个的字符,或者读取到文件结尾。然后fgets()函数向末尾添加一个空字符以构成一个字符串。如果在达到字符最大数目之前读完一行,它将在字符串的空字符之前添加一个换行符以标识一行结束。
问题出在有时字符串的结尾处可能多出一个换行符,我们需要把它去掉。
#include #include
#define LEN 5
intmain()
{charstr[LEN];
fgets(str, LEN, stdin);//fprintf(stderr, "%s %d\n", str, strlen(str));
for(int i = 0; i < LEN; i++)
printf("%d\t", str[i]);
printf("\n");if(str[strlen(str)-1] == '\n')
str[strlen(str)-1] = '\0';for(int i = 0; i < LEN; i++)
printf("%d\t", str[i]);
printf("\n");return 0;
}
输入:
abc
输出:
97 98 99 10 0
97 98 99 0 0
说明,当输入的字符少于指定数目时,会将最后一个换行符保存在s[len-1]的位置,s[len]处恒为'\0'。
输入:
abcdefg
输出:
97 98 99 100 0
97 98 99 100 0
说明,当输入的字符大于指定数目时,保存指定字符串长度-1个字符,不保存换行符,s[len]处恒为'\0'。
也想过用如下的函数来处理:
void clearEnter(char *p)
{while(*p)
{if(*p == '\n')*p = '\0';
p++;
}
}
但该函数有个问题,在此处处理fgets()函数获得的字符串尾的换行是有效的。假如字符串中间不是从fgets()函数获得,而字符串中间有换行符,则会将字符串中第一个换行符替换为'\0',也就丢弃了字符串的其他部分。
fgets阻塞 stdin 退出_fgets()用法笔记相关推荐
- fgets阻塞 stdin 退出_linux fgets 阻塞
当前位置:我的异常网» 热门搜索 » linux fgets 阻塞 linux fgets 阻塞 www.myexceptions.net 网友分享于:2013-09-23 搜索量:159次 场 ...
- fgets阻塞 stdin 退出_来自stdin问题的fgets[c]
我试过你的代码,但无法重现问题.以下代码的工作方式正是您所期望的,它会提示您输入名称,等待您键入名称,然后提示您输入地址,等等. 我想知道你是否不需要在提示输入更多信息之前阅读stdin并清空它? t ...
- SQLServer知识:sqlcmd用法笔记
今天给大家介绍sqlcmd用法笔记,希望对大家能有所帮助! 1.介绍 sqlcmd是一个 Microsoft Win32 命令提示实用工具,可以通过该命令工具实现SQL语句.脚本的执行,并且可以实现脚 ...
- easyui前端实现多选框_前端:Element UI 多选框组用法笔记
今天给大家分享一下Element UI 多选框组用法笔记,直接上代码! "兴趣爱好:"> "form.checkList"> for= {{item ...
- springboot+mybatis集成自定义缓存ehcache用法笔记
今天小编给大家整理了springboot+mybatis集成自定义缓存ehcache用法笔记,希望对大家能有所办帮助! 一.ehcache介绍 EhCache 是一个纯Java的进程内缓存管理框架,属 ...
- SpringBoot集成Redis用法笔记
今天给大家整理一下SpringBoot集成Redis用法笔记,希望对大家能有所帮助! 一.Redis优点介绍 1.速度快 不需要等待磁盘的IO,在内存之间进行的数据存储和查询,速度非常快.当然,缓存的 ...
- SpringBoot集成Mybatis用法笔记
今天给大家整理SpringBoot集成Mybatis用法笔记.希望对大家能有所帮助! 搭建一个SpringBoot基础项目. 具体可以参考SpringBoot:搭建第一个Web程序 引入相关依赖 &l ...
- 前端:Element UI 多选框组用法笔记
今天给大家分享一下Element UI 多选框组用法笔记,直接上代码! <html><head></head><body><el-form> ...
- shell脚本常用语句用法笔记
脚本基本语句用法笔记 grep -i 查询时不区分大小写 -n打印匹配的行号 -v 打印不匹配的行 -AX包括每次匹配之后X行 -BX包括每次匹配之后X行 cat /etc/passwd |grep ...
最新文章
- 关于JS面向对象、设计模式、以及继承的问题总结
- oracle往mysql数据同步存储过程_Oracle数据库之间数据同步
- GRE词汇乱序版-夹生的词汇2
- 一次失败的尝试,h5+Api 结合 react,webpack,同时生成android 、ios、h5端代码
- ParallaxView
- Angular 应用里的 vendor.js 是用来干什么的?
- c语言和java运行效率,Java语言与C语言代码运行效率的比较.pdf
- 调试Micrium OS应用程序时检测任务堆栈溢出的简单方法
- shopex PHP Notice,shopex官网用PHP为SHOPEX增加日志功能代码
- 基于Nodejs+vue开发实现高校学院网站系统
- 成都二手房长啥样 —— 基于链家数据
- 长江游艇俱乐部租金问题
- 毕设第三周(12月19日——12月25日)
- 互联网晚报| 8月18日|未婚已育女性办理生育津贴不需要结婚证;拼多多将上线跨境电商平台;小米汽车将采用宁德时代麒麟和比亚迪刀片...
- 浅入浅出keepalived+nginx实现高可用双机热备
- HNUST-OJ-1806-图的遍历——广度优先搜索
- Geography和 Geometry 的区别
- C语言注释风格(函数、功能、输入、输出、返回)
- 【四二学堂】Go语言入门-Go语言实现的一撮金游戏
- XMind思维导图介绍与下载安装使用教程
热门文章
- vba批量导入单元格时速度过慢的解决
- vTESTstudio入门到精通 - vTESTstudio工具栏介绍_File
- 人力资源公司怎么取名
- 打开优酷页面服务器未显示,没法打开优酷网页,打开优酷就会出现一个窗口显示Internet Explorer没法打开Internet站点http://v.youku.c...
- 150倍加速机械盘,UCloud云主机IO加速技术揭秘
- 不务正业的爱奇艺=不限速百度云?
- AUMA MesseTrend 2020调查:参展商在展会质量上投入更多资金
- apache 多站点配置(httpd.conf简单示例)
- 如何在PPT中添加答案(课件)
- 【Python】简单的逻辑训练题目(计算机二级练习题)