sscanf和sprintf
sscanf和sprintf是scanf和printf家族的一对成员,用于处理和分析字符串非常强大的两个函数
sprintf函数原型:
int sprintf(char *str, const char *format, ...)
作用是格式化字符串,具体功能如下所示:
①将数字变量转换为字符串;
②得到整型变量的16进制和8进制字符串;
③连接多个字符串。
举例:
char str[256] = { 0 };
int data = 1024;
将data转换为字符串
sprintf(str, "%d", data);
获取data的十六进制
sprintf(str, "0x%X", data);
获取data的八进制
sprintf(str, "0%o", data);
const char *s1 = "Hello";
const char *s2 = "World";
连接字符串s1和s2
sprintf(str, "%s %s", s1, s2);
sscanf函数原型:
int sscanf(const char *str, const char *format, ...)
将参数str的字符串根据参数format字符串来转换并格式化数据,转换后的结果存于对应的参数内。具体功能如下:
①根据格式从字符串中提取数据。如从字符串中取出整数、浮点数和字符串等;
②取指定长度的字符串;
③取到指定字符为止的字符串;
④取5仅包含指定字符集的字符串;
⑤取到指定字符集为止的字符串;
sscanf可以支持格式字符%[]:
(1) - : 表示范围,如:%[1 - 9]表示只读取1 - 9这几个数字 % [a - z]表示只读取a - z小写字母,类似地 %[A - Z]只读取大写字母
(2) ^ : 表示不取,如:%[^ 1]表示读取除'1'以外的所有字符 %[^ / ]表示除 / 以外的所有字符
(3), : 范围可以用","相连接 如%[1 - 9, a - z]表示同时取1 - 9数字和a - z小写字母
(4)原则:从第一个在指定范围内的数字开始读取,到第一个不在范围内的数字结束%s 可以看成%[] 的一个特例 %[^](注意^后面有一个空格!)
举例:
1.常见用法:
char str[10] = { 0 };
sscanf("12345", "%s", str);
printf("str=%s\n", str);
2.取指定长度的字符串:
sscanf("123456", "%4s", str);
printf("str=%s\n", str);
取最大长度为4字节的字符串
3.取到指定字符位置的字符串:
sscanf("123456 abcdef", "%[^ ]s", str);
printf("str=%s\n", str);
取遇到空格为止的字符串
4.取仅包含指定字符集的字符串:
sscanf("123456abcdef BCDEF", "%[1-9a-z]s", str);
printf("str=%s\n", str);
取仅包含1到9和小写字母的字符串
5.取到指定字符集为止的字符串:
sscanf("123456abcdef BCDEF", "%[^A-Z]s", str);
printf("str=%s\n", str);
取遇到大写字母为止的字符串
fread和fwrite的使用
fread和fwrite函数
函数原型:
size_t fread(void *buffer, size_t size, size_t, count, FILE *pf)
size_t fwrite(void *buffer, size_t size, size_t count, FILE *pf)
功能:读写数据块(将内存的内容直接写入磁盘)
返回值:成功,返回读 / 写的个数,出错或文件尾,返回0.
参数含义:
buffer 从pf中读取到buffer / 将buffer中的写入到pf中去。
size 每个要读 / 写的数据块的大小。
count 要读 / 写的数据块的个数
pf 要读 / 写的文件指针
ANSI C文件系统提供fread()和fwrite()两个函数,用于读 / 写长于一字节的数据类型。这两个函数允许读 / 写各种类型的数据块:
对fread()而言,buffer是接收读入数据的内存区的指针。
对fwrite()而言,buffer是写入到那个文件的信息的指针。
count的值确定读 / 写多少项,每项长度等于num_bytes。
fp是指向事先打开的流的指针。
正常情况下,fread()返回读入的项数,fwrite()返回写出的项数。
只要文件按二进制打开,fread()和fwrite()就可以读 / 写各类信息。