gets():

原型:char *gets(char *buffer) ;

功能:从stdlin中获取获取字符串一直到换行符或者遇到EOF为止,但换行符不被录取,会将换行符替换成‘\0’来表示字符串的结束

返回值:如果读取成功会返回buffer指针,如果遇到EOF或者发生错误会返回NULL,当遇到NULL需要调用ferror()和feof()来判断是遇到EOF还是发生了错误

ps:该函数读取一直读到遇到换行符为止,所以很容易发生溢出的情况,如果发生溢出,会覆盖堆栈中的内容,改变不相关的变量,我们可以使用fget()替换gets(),为了向后兼容,不会将换行符放入缓冲区中。

[cpp]  view plain copy
  1. #include "stdio.h" //这个头文件包含gets()函数
  2. int main()
  3. {
  4. char str1[15];
  5. gets(str1);
  6. printf("%s\n", str1);
  7. getchar() ;
  8. return 0;
  9. }

此时就可以从键盘上读取一个字符串到str1中

ps:scanf("%s", str1) ;这样也可以输入字符串,如果遇到空格符就会认为字符串结束了,空格后的字符作为下一个字符串,但gets()会遇到换行符为止

*****************************

getchar():

功能:这个函数由宏#define getchar() getc(stdin) 从标准输入中读取字符,等待用户输入字符串一直到换行符为止,用户输入的字符将会存入键盘缓冲区中包括换行符,他会读取第一个字符,返回第一个字符的ASCII码,getchar()会从缓冲区中读取剩下的字符一直到读完为止,然后等待如果输入换行符

ps:getch()和getchar()差不多,但getch()在用户输入后就立即返回了不等待用户输入换行符,会返回输入字符的ASCII码,如果错误就-1,这个经常用于调试中

[cpp]  view plain copy
  1. #include <string>
  2. #include <iostream>
  3. int main()
  4. {
  5. int c ;
  6. int a ;
  7. a = getchar() ;
  8. while((c = getchar()) != '\n')
  9. {
  10. printf("%c", c) ;
  11. }
  12. getchar() ;
  13. return 0 ;
  14. }

输出:

可以看出他是从缓冲区中获取剩下的字符的。

fgets():

函数原型:char *fgets(char *buf, int bufsize, FILE *stream);

从文件结构指针stream中读取数据,每次读取bufsize-1个数据,第bufsize个赋值成'\0',如果不足bufsize个数据则返回,如果遇到eof或者错误则返回Null,如果成功就返回buf地址

[cpp]  view plain copy
  1. #include <string.h>
  2. #include <stdio.h>
  3. #include <iostream>
  4. int main()
  5. {
  6. FILE *stream;
  7. char string[] = "Love, I Have\nSince you can do it.";
  8. char msg[20];
  9. /*
  10. *FILE * fopen(const char * path,const char * mode);
  11. *以w+的方式:以读写的方式打开,如果有文件则清零,没有则要新建一个新的 */
  12. stream = fopen("DUMMY.txt", "w+");
  13. /*
  14. *size_t fwrite(const void* buffer, size_t size, size_t count, FILE* stream);
  15. *buffer:代表要写入的数据
  16. *size:写入每项的字节数
  17. *count:写入的项数
  18. *stream:要写入的字节流
  19. */
  20. fwrite(string, strlen(string), 1, stream);
  21. /* 定位到文件的开始 */
  22. fseek(stream, 0, SEEK_SET);
  23. fgets(msg, 6, stream);//此时文件指针会第六个字符
  24. printf("%s\n", msg);
  25. fgets(msg, 20, stream);
  26. printf("%s", msg);
  27. fseek(stream, 0, SEEK_SET);
  28. fgets(msg, 23, stream);
  29. printf("%s", msg);
  30. fclose(stream);
  31. system("pause") ;
  32. return 0;
  33. }

执行结果为:

gets();getschar();fget();相关推荐

  1. 【python】使用property函数为类创建可管理属性fget\fset\fdel

    import mathclass Circle:def __init__(self, radius):self.__radius = radius # 设置私有属性,不让用实例.__radius访问d ...

  2. Python标准库:内置函数property(fget=None, fset=None, fdel=None, doc=None)

    本函数是设置类成员的属性.参数fget是获取类成员的属性值:参数fset是设置类成员的属性值:fdel是删除类成员:参数doc是设置属性的文档字符串.通过这个函数的方式,可以实现类成员变量隐藏的方式, ...

  3. Python 内建函数 - property(fget=None, fset=None, fdel=None, doc=None)

    函数功能 参数说明 用法 版本变更 函数功能 返回一个property属性 参数说明 fget是一个用来获取属性值的函数: fset是一个用来设置属性值的函数: fdel是一个用来删除某个属性值的函数 ...

  4. C语言--gets()、gets_s()、fget()的比较

    一.gets()函数 在读取字符串时,scanf()和转换说明%s只能读取一个单词.可是在程序中经常要读取一整行输入,而不仅仅是一个单词.许多年前,gets()函数就用于处理这种情况.gets()函数 ...

  5. 数组名以及fget函数()模仿用法

    一: 数组名即数组第一个元素的地址. #include <stdio.h> //int main() //{ //    int a; //    int *p = &a;  // ...

  6. 第8.27节 Python中__getattribute__与property的fget、@property装饰器getter关系深入解析

    一. 引言 在<第7.23节 Python使用property函数定义属性简化属性访问的代码实现>和<第7.26节 Python中的@property装饰器定义属性访问方法gette ...

  7. Python使用property函数定义属性访问方法如果不定义fget会怎么样?

    我们知道Python使用property函数定义属性访问方法时的语法如下: 实例属性=property(fget=None, fset=None, fdel=None, doc=None) 而是要@p ...

  8. fget函数读取一行数据,非二进制文件 -- linux

    fget函数的原型如下:char *fgets(char *buf, int n, FILE *fp) 功能:从文件流读取一行,送到缓冲区,使用时注意以下几点: 1.当遇到换行符或者缓冲区已满,fge ...

  9. linux 内核 fget,fgets函数 linux中fgets函数怎么用

    一个函数该如何使用?我们最先要了解的就是这个函数的语法以及具体的含义是什么,所以今天我们就来看一看fgets函数在实际的运用过程当中是如何使用的,希望能给大家带来一定的帮助. fgets函数--lin ...

最新文章

  1. 移动端框架如雨后春笋,你该如何选择?
  2. InheritParasitic.js
  3. linux下使用free命令查看实际内存占用
  4. python训练词库_在Python中训练NGramModel
  5. json api_JSON模式在构建和部署API中的作用
  6. 【Arduino】开发入门【八】舵机操作+源代码
  7. python必备入门代码-小白入门Python开发,必备技能有哪些?
  8. 快速发布发包平台技术论坛
  9. evaluatejavascript不起作用_android4.4 evaluateJavascript 到android2.X上不能调用的问题
  10. 拓端tecdat|R语言中的block Gibbs吉布斯采样贝叶斯多元线性回归
  11. Linux 查看网卡配置速率
  12. dell笔记本外接显示器_戴尔笔记本怎么连接外接显示器
  13. 【条形码识别】条形码中数字的识别的matlab仿真
  14. 手机更换证件照背景色只需1分钟,别去打印店花冤枉钱了
  15. 机器视觉软件开发SDK
  16. 地图中的鼠标移动响应
  17. 灭了珊瑚虫,OOXX了SOFF,下一个是谁?
  18. 5.JavaSwing知识点----(1)swing中的容器
  19. Excel 2010 SQL应用116 分组统计之GROUP BY续
  20. reactive和ref的特性和区别

热门文章

  1. Matlab R2016b安装后打开报错:License Manager Error-95
  2. 小米Note手机安装Linux
  3. sqlserver 交集 并集 差集
  4. Fikker 反向代理服务器CDN 应用优化参考
  5. MVC过滤器:自定义异常过滤器
  6. java arraylist 遍历树_Java递归遍历树形结构
  7. VBA如何快速查找一个区域的右下角的那个单元格? 4种方法的比较
  8. 数据库查询及事务管理
  9. QQ,微信第三方登陆
  10. 为什么手机棋牌游戏开发比PC端开发要复杂?