C++ 进阶 day8
5.7 回归
格式串转字符串存入字符数组中:sprintf/snprintf
是字符数组,不是文件
- printf是向终端打印字符串
- fprintf是向外部文件中打印字符串
- sprintf/snprintf是向字符数组打印,不同类型的数据可以组成字符串放入字符数组
- 区别:越界处理方式+返回值
sprintf
int sprintf(char *str, const char *format, ...);
- 功能:将指定的格式串转换为字符串,放入字符数组中
- 参数1:字符数组的起始地址
- 参数2:格式串,可以包含多个格式控制符
- 参数3:可变参数
- 返回值:成功返回转换的字符个数,失败返回EOF
对于上述函数而言,用一个小的容器去存储一个大的转换后的字符时,会出现指针越界的段错误,为了安全起见,引入了snprintf
snprintf
int snprintf(char *str, size_t size, const char *format, ...);
- 功能:将格式串中最多size-1个字符转换为字符串,存放到字符数组中
- 参数1:字符数组的起始地址
- 参数2:要转换的字符个数,最多为size-1
- 参数3:格式串,可以包含多个格式控制符
- 参数4:可变参数
- 返回值:如果转换的字符小于size时,返回值就是成功转换字符的个数,如果大于size则只转换size-1个字符,返回值就是size,失败返回EOF
模块化读写 (fread/fwrite)
fread
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
- 参数1:容器指针
- 参数2:sizeof(数据类型) 字符,整数,结构体
- 参数3:项数
- 参数4:文件指针
关于文件光标:fseek/ftell/rewind
fseek
int fseek(FILE *stream, long offset, int whence);
- 移动指针
- 文件指针
- 偏移量
- 偏移起始点
- SEEK_SET:起始
- SEEK_CUR:当前位置
- SEEk_END:结束
- 返回值:成功返回0,失败返回-1并置位错误码
ftell
long ftell(FILE *stream);
功能:获取偏移量
rewind
void rewind(FILE *stream);
功能:将光标定位在开头
文件IO
- open、close、read、write、lseek
- 标准io的基础,该操作效率较低,因为没有缓冲区的概念
文件描述符
- 文件描述符的本质是一个大于等于0的整数,在使用open函数打开文件时,就会产生一个用于操作文件的句柄,这就是文件描述符
- 通常限制1024,使用ulimit -a查看,ulimit -n修改
- 最小分配原则
- 0,1,2默认打开,标准输出,标准输入,标准错误
打开文件open
int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);
同一个函数,最后一个参数不填写会随机给出
- 文件路径
- 模式
- 权限
关闭文件
#include <unistd.h>
int close(int fd);
功能:关闭文件描述符对应的文件
3.4 读写操作:read、write
read
#include <unistd.h>
ssize_t read(int fd, void *buf, size_t count)
- 描述符
- 地址
- 读取字符的个数
write
#include <unistd.h>
ssize_t write(int fd, const void *buf, size_t count);
- 描述符
- 地址
- 写入字符的个数
关于光标的操作:lseek
#include <sys/types.h>
#include <unistd.h>
off_t lseek(int fd, off_t offset, int whence);
- 功能:返回光标所在的位置
- 描述符
- 偏移量
- 起始位置
与前面一样

浙公网安备 33010602011771号