关于函数接口的认识和学习

1.复习拷贝文件的流程:

a.打开文件:fopen

b.文件的读写:fgetc/fputc/fgets/fputs

c.关闭文件:fclose

注意:全缓存的缓存区大小为4k,所以定义了一个4096字节的char数组。打开两个目标文件和源文件,定义两个指针指向他们。


1.函数接口:

1.fwrite

size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);

功能:

向流中写入nmemb个对象,每个对象size字节大小,在ptr指向的空间中

参数:

ptr:存放数据空间的首地址

size:每个数据对象的大小

nmemb:数据对象的个数

stream:文件流指针

返回值:

成功返回写入对象的个数

失败返回0

读到文件末尾返回0

2.fread

size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);

功能:

从流中读取nmemb个对象,每个对象size个字节,存放到ptr指向的空间中

参数:

ptr:存放读取内容空间首地址

size:读取对象的大小

nmemb:读取对象的个数

stream:文件流指针

返回值:

成功返回读到对象个数

失败返回0

读到文件末尾返回0

练习:

1.利用fread和fwrite完成将src.jpg图片内容拷贝到dst.jpg图片中

2.利用fread将bmp照片中的宽和高读出来打印出来

3.fprintf

int fprintf(FILE *stream, const char *format, ...);

功能:

将格式化字符串输出到stream指向的流中

printf

fprintf(stdout, );

4.fsancf

int fscanf(FILE *stream, const char *format, ...);

功能:

从流中读取格式化的字符串

2.流的定位:

1.ftell

long ftell(FILE *stream);

功能:

获得流的偏移量

2.rewind

void rewind(FILE *stream);

功能:

将流的偏移量重新设置到开头

3.fseek

int fseek(FILE *stream, long offset, int whence);

功能:

设置流的偏移量

参数:

stream:文件流指针

offset:偏移量

> 0 向后偏移

< 0 向前偏移

whence:

SEEK_SET 文件开头

SEEK_CUR 文件当前位置

SEEK_END 文件末尾

练习:从终端输入一个单词,获得单词的含义

cpp 复制代码
​
int main(void)
{
	char s[256]={0};                      //定义一个接收查找单词的字符型数组
	char tmpbuff[4096];                   //定义一个接收词库的字符型数组
	char* ptmp = NULL;
	char *pret = NULL;
	printf("input your find word : ");
	scanf("%s",s);                      //从终端提取查找的单词放在s地址中

	FILE* fp = NULL;
	fp = fopen("dict.txt","r");          

	if(NULL == fp)
	{
		perror("fail to fpoen");
		return -1;
	}

	while(1)
	{
		pret = fgets(tmpbuff,sizeof(tmpbuff),fp);     //提取词库每一行的单词和注释放在tmpbuff
		if(pret == 0)                                 //fgets的返回值为0说明无法读取到了
		{
			break;
		}
	
	ptmp = tmpbuff;                                   //让ptmp和tmpbuff的指针初始化在相同的位置
	while(*ptmp != ' '&&*ptmp !='\0')                  //识别到单词后的空格停下
	{
		ptmp++;                                       //识别不是空格,让ptmp指针不断向后移动
	}
	*ptmp = '\0';                              //识别为空格的地方换成'\0',便于后面比较字符时候可以将\0前面的单词识别为一个字符串
	ptmp++;

	while(*ptmp == ' ')  
	{ 
		ptmp++;                             //让ptmp指针跳过空格的位置,指向注释字符串的第一个字符
	}
	if(strcmp(s,tmpbuff)==0)                 //比较单词字符串和查找字符的大小,相等返回值为0,找到!
	{
		printf("%s",ptmp);                  //打印出上面找到注释第一个字符的地址ptmp所对应的字符串
		fclose(fp);
		return 0 ;
	}
	}
	fclose(fp);
	printf("单词不存在!\n");                  //若是比对不成功,则代表没有这个单词
	return 0 ;
}

​
相关推荐
软件小伟2 分钟前
Vue3+element-plus 实现中英文切换(Vue-i18n组件的使用)
前端·javascript·vue.js
Bruce小鬼5 分钟前
QT文件基本操作
开发语言·qt
2202_7544215411 分钟前
生成MPSOC以及ZYNQ的启动文件BOOT.BIN的小软件
java·linux·开发语言
蓝染-惣右介13 分钟前
【MyBatisPlus·最新教程】包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段
java·数据库·tomcat·mybatis
小林想被监督学习14 分钟前
idea怎么打开两个窗口,运行两个项目
java·ide·intellij-idea
HoneyMoose16 分钟前
IDEA 2024.3 版本更新主要功能介绍
java·ide·intellij-idea
我只会发热18 分钟前
Java SE 与 Java EE:基础与进阶的探索之旅
java·开发语言·java-ee
是老余19 分钟前
本地可运行,jar包运行错误【解决实例】:通过IDEA的maven package打包多模块项目
java·maven·intellij-idea·jar
crazy_wsp19 分钟前
IDEA怎么定位java类所用maven依赖版本及引用位置
java·maven·intellij-idea
.Ayang22 分钟前
tomcat 后台部署 war 包 getshell
java·计算机网络·安全·web安全·网络安全·tomcat·网络攻击模型