1. 研究
sscanf
sprintf
面向控制台标准输入输出的scanf printf
面向字符串的输入输出函数sscanf sprintf
面向文件的流的输入输出函数fscanf fprintf
sprintf函数原型
int sprintf(char *str,const char *format,...)
作用:格式化字符串
1、将数字变量转化为字符串
sprintf(str, "%d", 12345); //->"12345"
2、得到整形变量的8进制和16进制字符串
sprintf(str,"0%o",12345);
sprintf(str,"0x%X",12345);
3、连接多个字符串
sprintf(str,"%s %s",s1,s2);
sscanf函数原型
int sscanf(const char *str,const char *format,...)
作用:将参数str的字符串根据参数format字符串来转换并格式化数据,转换后的结果存于对应的参数内。
1、根据格式从字符串中提取数据。如提取出整数、浮点数和字符串等。
2、取指定长度的字符串
3、取到指定字符为止的字符串
4、取仅包含指定字符集的字符串
5、取到指定字符集为止的字符串
const char *str = "http://www.baidu.com:1234";
sscanf(str,"%[^:]://%[^:]:%[1-9]",str1,str2,str3);
1、-: 表示范围,如:%[1-9]表示只读取1-9这几个数字 %[a-z]表示只读取a-z小写字母,类似地 %[A-Z]只读取大写字母
2、^: 表示不取,如:%[^1]表示读取除'1'以外的所有字符 %[^/]表示除/以外的所有字符
3、,: 范围可以用","相连接 如%[1-9,a-z]表示同时取1-9数字和a-z小写字母
2.研究
fread
fwrite 专门处理二进制
fread函数原型
size_t fread(void *buffer, size_t size, size_t count, FILE *stream);
fwrite函数原型
size_t fwrite(const void *buffer, size_t size, size_t count, FILE *stream);
fwrite参数
1、要写入的数据地址,二进制无类型
2、一次写入的基本单位
3、写入几个基本单位
4、从哪里写
fread参数
1、要读的数据放在哪里,指向缓冲区
2、读的基本单位
3、要读多少个基本单位
4、要从哪里读入
例如实现拷贝命令,支持文本和二进制,源文件以二进制方式打开
sscanf
sprintf
面向控制台标准输入输出的scanf printf
面向字符串的输入输出函数sscanf sprintf
面向文件的流的输入输出函数fscanf fprintf
sprintf函数原型
int sprintf(char *str,const char *format,...)
作用:格式化字符串
1、将数字变量转化为字符串
sprintf(str, "%d", 12345); //->"12345"
2、得到整形变量的8进制和16进制字符串
sprintf(str,"0%o",12345);
sprintf(str,"0x%X",12345);
3、连接多个字符串
sprintf(str,"%s %s",s1,s2);
sscanf函数原型
int sscanf(const char *str,const char *format,...)
作用:将参数str的字符串根据参数format字符串来转换并格式化数据,转换后的结果存于对应的参数内。
1、根据格式从字符串中提取数据。如提取出整数、浮点数和字符串等。
2、取指定长度的字符串
3、取到指定字符为止的字符串
4、取仅包含指定字符集的字符串
5、取到指定字符集为止的字符串
const char *str = "http://www.baidu.com:1234";
sscanf(str,"%[^:]://%[^:]:%[1-9]",str1,str2,str3);
1、-: 表示范围,如:%[1-9]表示只读取1-9这几个数字 %[a-z]表示只读取a-z小写字母,类似地 %[A-Z]只读取大写字母
2、^: 表示不取,如:%[^1]表示读取除'1'以外的所有字符 %[^/]表示除/以外的所有字符
3、,: 范围可以用","相连接 如%[1-9,a-z]表示同时取1-9数字和a-z小写字母
2.研究
fread
fwrite 专门处理二进制
fread函数原型
size_t fread(void *buffer, size_t size, size_t count, FILE *stream);
fwrite函数原型
size_t fwrite(const void *buffer, size_t size, size_t count, FILE *stream);
fwrite参数
1、要写入的数据地址,二进制无类型
2、一次写入的基本单位
3、写入几个基本单位
4、从哪里写
fread参数
1、要读的数据放在哪里,指向缓冲区
2、读的基本单位
3、要读多少个基本单位
4、要从哪里读入
例如实现拷贝命令,支持文本和二进制,源文件以二进制方式打开
#include<stdio.h>
#include<stdlib.h>
#pragma warning(disable:4996)
int main(int argc, char *argv[])
{
if (argc != 3){
printf("Usage:%s src dst\n",argv[0]);
return 1;
}
FILE *srcp = fopen(argv[1], "rb");
if (!srcp){
perror("fopen");
goto end;
}
FILE *dstp = fopen(argv[2], "wb");
if (!dstp){
perror("fopen");
goto end;
}
//获取文件大小
fseek(srcp, 0, SEEK_END);
long size = ftell(srcp);
rewind(srcp);
char *buf = (char *)malloc(size);
if (!buf){
perror("malloc");
goto end;
}
fread(buf, 1, size, srcp);//直接获得整个文件大小,读入内存
fwrite(buf, 1, size, dstp);//将整个文件写入硬盘
end:
if (srcp){
fclose(srcp);
srcp = NULL;
}
if (dstp){
fclose(dstp);
dstp = NULL;
}
if (buf){
free(buf);
buf = NULL;
}
}