linux以行为单位进行读写操作
2024-09-30 08:23:59
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 截图
最新文章
- 导出Excel和Excel生成dt
- debian8 Apache 更改根目录
- .Net语言 APP开发平台——Smobiler学习日志:如何在webview中加载网页
- iOS 利用不等的constraint实现布局间隔调整
- Linux系统中CPU使用率查询常用的5个命令
- Iaas-cloudstack2
- H - The Falling Leaves
- leetcode面试准备: Word Pattern
- CentOS5.4下安装codeblocks 12.11
- Oracle 游标疑问
- Shibboleth
- Chome——扩展程序,获取更多扩展程序报错
- Hash表分析
- MySQL 中基于 XA 实现的分布式事务
- uni-app调用原生的文件系统管理器(可选取附件上传)
- Vulnerability Scanning
- object detection[YOLO]
- 《Tensorflow从入门到精通》
- es6快速入门
- 一键开启MacOS HiDPI