1. 按对象读写
读/输入
fread:
#include <stdio.h>
size_t fread(void *ptr,size_t size,size_t nmemb );
参数:
ptr :指向用来保存读取到的内容空间首地址;
size:要读取的单个对象(数据项)的大小
nmemb :要读取的对象(数据项)个数;
stream:输入流
返回值:成功返回实际读到的对象个数,读到文件的末尾或者失败返回0;
}
写/输出
fwrite:
size_ _t fwrite(const void *ptr,size_ _t size, size_ _t nmemb,FIlE *stream);
{
功能:向一个打开的文件(流)写入内容;
参数:
ptr//指向待写入的内容;
size//要写入的单个对象(数据项)的大小
nmemb//要写入的对象(数据项)的个数
stream//输出流
返回值:成功返回实际写入的对象个数;
}
2.判断文件的末尾/流出错
int feof(FILE *stream);
{
读到文件末尾返回1,否则返回0;
}
int ferror(FILE *stream)
{
流出错返回1,否则返回0;
}
3. 文件的定位
long ftell()(FILE *stream);
{
功能:查看文件内部指针的位置;
返回值:成功返回文件内部指针距离开头的偏移量;
}
void rewind(FILE *stream);
{
功能:将文件内部指针置为开头;
}
int fseek(FILE *stream, 1ong offset, int whence);
{
功能:对文件定位;
参数:
stream :文件流指针;
offset:偏移量,
负数:向左偏移;
正输:向后偏移
whence
SEEK_SET:文件的开头
SEEK_CUR: 文件内部指针的当前位置
SEEK_END:文件的末尾
返回值:成功返回0,识别返回-1并设置错误号;
}
实现对图片加密
//将图片的前十个字节读取出来,逆序 再写回到原位置–>加密
#include <stdio.h>
#include <string.h> // 正确引入头文件string.h
#include <stdlib.h>
// 函数声明
void mySwap(char *buf, int size);//
int main()
{
FILE *fp = fopen("1.jpg", "r+"); // 修改文件名为1.jpg,去掉空格
if (NULL == fp) {
perror("fopen");
return 1; // 修改为1
}
char buf[32] = {0}; // 修改为大写字母O,初始化
int ret = fread(buf, sizeof(buf), 10, fp); // 修正逗号错误
printf("ret = %d\n", ret); // 添加换行符
// 读到的内容逆序
mySwap(buf, ret); // 调用函数mySwap
// 将指针指向开头
if (-1 == fseek(fp, 0, SEEK_SET))
{ // 修正了 fseek 的调用方式
perror("fseek");
return 1;
}
fwrite(buf, sizeof(char), ret, fp); // 修正了 fwrite 的调用参数
fclose(fp); // 关闭文件
return 0;
}
// 函数定义
void mySwap(char *buf, int size) {
for (int i = 0; i < size / 2; i++)
{
char temp = buf[i];
buf[i] = buf[size - i - 1];
buf[size - i - 1] = temp;
}
}
4. 格式化输出
int printf(const char *format, ...);
int fprintf(FILE *stream, const char *format, ...);
int sprintf(char *str, const char *format, ...);
{
功能:向str指向的空间格式化输出;
}
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <strings.h> // 修正头文件名称
int main() {
int tem = 30;
int hum = 50;
int light = 1000;
char buf[32] = {0}; // 修正数组初始化的写法
sprintf(buf, "%d&%d&%d", tem, hum, light); // 修正sprintf函数参数错误
printf("buf: %s\n", buf); // 修正printf函数参数错误,移除逗号后的空格
return 0;
}
按照格式输入:
int sscanf(const char *str,const char *format, ...)
{
将str里的数据按照格式输入到地址表当中;
}
#include <stdio.h>
#include <string.h>
int main() {
int tem = 30;
int hum = 50;
int light = 1000;
char buf[32] = {0};
sprintf(buf, "%d&%d&%d", tem, hum, light);
printf("buf: %s\n", buf);
int var1, var2, var3; // 修正了变量名称
sscanf(buf, "%d&%d&%d", &var1, &var2, &var3); // 修正了sscanf函数的调用参数
printf("var1 = %d, var2 = %d, var3 = %d\n", var1, var2, var3); // 修正了printf函数的调用参数
return 0;
}