1 gets/fgets函数

  char* fgets(char *restrict buf,int n,FILE *restrict fp)

    参数1:存放读入串的缓冲区

    参数2:表示读入的字符个数,最大值不能超过缓冲区的长度,遇到\N为止,如果读到N-1个字符仍让没有读到'\n' 那么只读入n-1个字符,最后一个字符用来放入'\0';

    注意:fgets会把'\n'也放入到缓冲中 所以实际上的字符为n-1个

  char* gets(char *buf)

    返回值:

      成功读入一行,返回缓冲区的首地址

      出错返回NULL

   gets和fgets类似,不将'\n'放入到缓冲区

   gets的漏洞:函数的缓冲区由用户提供,但是无法指定一次最多读入多少字节的内容,所以很危险

1.1 演示gets的漏洞

在ubuntu14.04 直接不让用gets() 警告危险

 #include <stdio.h>
int main(void)
{
/* 这个缓冲区已经很大了,如果用户输入是在命令行方式下的话,该缓冲的空间是足够的 */
char buf[];
while(gets(buf) != NULL){ /* 从屏幕读入一行字符串 */
printf("%s\n", buf); /* 并且将该字符串显示输出到屏幕上 */
}
return ;
}

注意:屏幕简单的输入和输出都不会出现问题 因为默认1024个字节 当一个比较大的时候 就会出现段错误

2puts/fputs:向标准输出字符串

  注意:gets函数不读入'\n'但是puts会输出'\n'

推荐使用fgets和fputs

3 3按照行也读:通常配置文件都是需要这样来处理+正则表达式

 #include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LINE 1024
int main(void)
{
char buf[MAX_LINE]; /* 缓冲区 */
FILE *fp;
int len;
if((fp = fopen("test.txt", "r")) == NULL){ /* 打开文件 */
perror("fail to read");
exit();
}
while(fgets(buf, MAX_LINE, fp) != NULL){ /* 每次读入一行 */
len = strlen(buf);
/* 输出所读到的字符画串,并将字符个数输出 */
buf[len - ]='\0'; /* 去掉换行符,这样其他的字符串函数就可以处理了 */
printf("%s %d\n", buf,len - ); /* 使用printf函数输出 */
}
return ;
}

3.1 截图

最新文章

  1. 导出Excel和Excel生成dt
  2. debian8 Apache 更改根目录
  3. .Net语言 APP开发平台——Smobiler学习日志:如何在webview中加载网页
  4. iOS 利用不等的constraint实现布局间隔调整
  5. Linux系统中CPU使用率查询常用的5个命令
  6. Iaas-cloudstack2
  7. H - The Falling Leaves
  8. leetcode面试准备: Word Pattern
  9. CentOS5.4下安装codeblocks 12.11
  10. Oracle 游标疑问
  11. Shibboleth
  12. Chome——扩展程序,获取更多扩展程序报错
  13. Hash表分析
  14. MySQL 中基于 XA 实现的分布式事务
  15. uni-app调用原生的文件系统管理器(可选取附件上传)
  16. Vulnerability Scanning
  17. object detection[YOLO]
  18. 《Tensorflow从入门到精通》
  19. es6快速入门
  20. 一键开启MacOS HiDPI

热门文章

  1. myBatis学习笔记(10)——使用拦截器实现分页查询
  2. weex 小结
  3. 【转载】.NET Remoting学习笔记(二)激活方式
  4. phpExcel大数据量情况下内存溢出解决
  5. poj 3105 Expectation 按位统计
  6. 混合minxins
  7. Matlab依据样本随机数求概率曲线
  8. 一个动态库连续注册的windows脚本regsvr32
  9. UVA - 12338 Anti-Rhyme Pairs 二分+hash
  10. Android:在子线程中更新UI的三种方式