当前位置: 首页 > news >正文

C语言下的文件详解

主要内容

  1. 文件概述
  2. 文件指针
  3. 文件的打开与关闭
  4. 文件的读写

文件

       把输入和输出的数据以文件的形式保存在计算机的外存储器上,可以确保数据能随时使用,避免反复输入和读取数据 

文件概述

  1. 文件是指一组相关数据的有序集合
  2. 文件是存储数据的基本单位,可以通过读取文件访问数据。

分类

可以按照不同角度对文件进行分类:
按存储介质不同,可以分为磁盘文件、磁带文件、打印文件等
按存储内容不同,可以分为程序文件和数据文件
按访问方式不同,可以分为顺序文件、随机文件和二进制文件
按用户不同,可以分为普通文件和设备文件

C语言文件分类

在C语言中,把文件看作是一个字符的序列
根据数据的组织形式可以分为 ASCII 文件和二进制文件 :
1 ASCII文件也称为文本文件 ,在磁盘中存放时每个字符对应一个字节,用于存放对应 ASCII
2 )二进制文件是按二进制的编码方式存放文件,将内存中的数据按照其在内存中的存储形式原样输出到磁盘中存放。 
短整数 968 00000011 11001000B ):
如果按 ASCII 码的形式输出则占 3 个字节(每个字符占 1 个字节)
而按二进制形式输出,则在磁盘上占 2 个字节

 

C 语言版本不同,对文件的处理方式也各有不同,主要有两种方法:
一种是“缓冲文件系统”
一种是“非缓冲文件系统”

缓冲文件系统

•缓冲文件系统会自动在内存中为每一个正在使用的文件分配一个缓冲区
在写文件时,先将数据放入缓冲区,当缓冲区存满数据后才将缓冲区中的数据写入文件。
在读文件时,先一次将一部分数据读入缓冲区,当缓冲区存满数据后才将数据送到程序数据区。
缓冲区大小由 C 语言的版本确定,一般为 512 字节 

非缓冲文件系统

非缓冲文件系统就是系统不会在内存中为文件分配缓冲区,所有的文件操作是直接跟文件打交道,这会导致系统整体效率下降

文件输入输出函数

ANSI C 规定了标准的输入输出函数用于文件读写,它们的声明在 stdio.h 文件中

文件指针

在缓冲文件系统中,每个文件都在内存中分配一个缓冲区,用来存放文件信息
信息被存放在一个结构体中,该结构体由系统定义,命名为FILE
typedef struct
{    int level;                    //缓冲区“满”或“空”的标志unsigned flags;            //文件状态标志char fd;                    //文件描述unsigned char hold;            //如果没有缓冲区则不读取字符int bsize;                    //缓冲区大小unsigned char _FAR *buffer; //缓冲区位置unsigned char _FAR *curp;    //指向缓冲区当前数据的指针unsigned istemp;            //临时文件指示器short token;                //用于有效性检查
}FILE;
文件指针变量是一个文件结构体类型的指针变量。 定义文件类型指针变量的一般形式为
FILE * 指针变量名 ;
File *fp;
// fp是一个指向FILE结构体类型的指针变量

文件的打开与关闭

C 语言中文件操作一般包括三个步骤:
1 )用 fopen 函数打开文件
2 )进行读写操作
3 )用 fclose 函数关闭文件

fopen函数

fopen 函数用于打开文件,并把结果赋给 FILE 指针变量,它的一般形式为:
  fopen(文件名,文件打开方式);
“文件名”是要打开的文件名,可以是完整的文件路径

FILE *fp;

             //fp是一个指向FILE结构体类型的指针变量

fp = fopen("file_data.txt","r");

            //以只读方式打开文件file_data.txt

文件打开方式”是打开文件的访问方式

fopen函数,会由于无法打开指定文件而出现错误。

如果出错,fopen函数会返回一个空指针值NULLNULLstdio.h中被定义为0)。

       例如以“r”方式打开时,文件不存在,要进行错误处理。

FILE *fp;

if( (fp = fopen("file_data.txt","r") ) == NULL )

printf("can not open the file\n");

  exit(0);

}

 fclose函数

在操作完一个文件后要关闭文件指针,以释放缓冲区内存,防止其他误操作
关闭文件就是使文件指针变量不再指向该文件
fclose 函数的一般形式为:
fclose (文件类型指针);
fclose(fp);

文件的读写

fputc函数

fputc 函数的作用是将一个字符写入指定文件中
它的一般形式为:
fputc (字符型数据,文件指针);

13.1】从键盘输入文本,并将文本写入磁盘上存储的文本文件file_data.txt中。以字符#作为输入结束标志。

分析:

首先打开文件,然后从键盘循环输入字符,如果字符不是结束标志“#”,那么将字符写入文件,否则关闭文件

#include<stdio.h>
#include<stdlib.h>
void main()
{    FILE *fp;char ch;if( (fp = fopen("file_data.txt","w")) == NULL )  //打开文件{    printf("can not open the file\n");exit(0);  //退出程序,必须包含<stdlib.h>头文件}ch = getchar();while(ch != '#' ){    fputc(ch,fp);  //输出字符ch = getchar();}fclose(fp);  //关闭文件
}

 fgetc函数

fgetc 函数的作用是从指定的文件中读入一个字符,并作为函数的返回值返回,如果读到文件结束符时,则返回一个文件结束标志 EOF (值为 -1 )。
fgetc 函数的一般形式为:
•  fgetc (文件指针);

13.2】读取文本文件file_data.txt,并将文件中的内容输出到屏幕上。

分析:

首先打开文件,然后反复从文件中读入一个字符,并输出到屏幕,直到文件的结尾,最后关闭文件。

#include<stdio.h>
#include<stdlib.h>
void main()
{    FILE *fp;char ch;if( (fp = fopen("file_data.txt","r")) == NULL )  //打开文件{    printf("can not open the file\n");exit(0); //退出程序}ch = fgetc(fp);  //从文件中读入一个字符while(ch != EOF ){    putchar(ch);ch = fgetc(fp);  //从文件中读入一个字符}fclose(fp);  //关闭文件
}

fputs函数

fputs 函数的作用是将字符串写入指定文件中
它的一般形式为:
•  fputs (字符串数据,文件指针);
字符串数据可以是字符串常量或者字符数组名,写入时字符串最后的‘ \0’ 并不一起写入,也不自动添加回车符。
如果写入成功,则函数返回值为 0 ,否则返回值为 EOF

13.3】从键盘输入一串字符串,并将字符串写入文本文件file_data.txt中。

解决该问题的主要步骤为:

1)打开文本文件file_data.txt

2)从键盘输入一串字符串。

3)将字符串写入文件中。

5)关闭文件。

6)结束程序。

#include<stdio.h>
#include<stdlib.h>
void main()
{    FILE *fp;char str[20];if( (fp = fopen("file_data.txt","w")) == NULL ){    printf("can not open the file\n");exit(0);}printf("input the string: ");gets(str);fputs(str,fp);  //写入字符串fclose(fp);
}

fgets函数

fgets 函数的作用是从指定文件中读入指定长度的字符串
它的一般形式为:
•  fgets (字符数组名, n ,文件指针);
指定的长度由整型数据 n 决定。
从文件中读入 n-1 个字符,然后在最后添加一个‘ \0’ 字符作为字符串结束的标志。
如果在读完 n-1 个字符之前遇到一个换行符或一个 EOF ,则读入结束。
最多只能读入 n-1 个字符,读入的字符被放入参数的字符数组中,读入结束后,将字符数组的首地址作为函数返回值

13.4】读取文本文件file_data.txt中指定长度的文本,长度由键盘输入,并将读取的内容输出到屏幕上。

解决该问题的主要步骤为:

1)打开文本文件file_data.txt

2)从键盘输入要读取的文本长度。

3)读入数据。

4)输出数据。

5)关闭文件。

6)结束程序。

#include<stdio.h>
#include<stdlib.h>
void main()
{    FILE *fp;char str[20];int n;if( (fp = fopen("file_data.txt","r")) == NULL ){    printf("can not open the file\n");exit(0);}printf("input the character's number: ");scanf("%d",&n);fgets(str,n+1,fp);printf("%s\n",str);fclose(fp);
}

fprintf函数

fprintf 函数将数据按指定格式写入指定文件中,与 printf 函数的作用相似。
它的一般形式为:
  fprintf (文件指针,格式字符串,输出表列);
【例13.5】将指定数据写入文本文件file_data.txt中。
编写程序如下:
#include<stdio.h>
#include<stdlib.h>
void main()
{    FILE *fp;int i=10,j=12;  double m=1.5,n=2.345;  char s[]="this is a string";  char c='\n';  if( (fp = fopen("file_data.txt","w")) == NULL ){    printf("can not open the file\n");exit(0);}fprintf(fp,"%s%c",s,c);  fprintf(fp,"%d %d\n",i,j);  fprintf(fp,"%lf %lf\n",m,n);  fclose(fp); 
}

文件中保存的文本与程序中的数据一致,且格式与指定格式相同

【例13.6】按照每行5个数,将Fibonacci数列的前40个数写入file_data.txt文件中。
编写程序如下:
#include<stdio.h>
#include<stdlib.h>
void main()
{    FILE *fp;int f[40];int i;if( (fp = fopen("file_data.txt","w")) == NULL ){    printf("can not open the file\n");exit(0);}for (i=0;i<=39;i++)  //求Fibonacci数列{    if (i==0||i==1) f[i]=1;elsef[i]=f[i-2]+f[i-1];}for (i=0;i<=39;i++)  //写入文件{    if ((i+1)%5==0)fprintf(fp,"%10d\n",f[i]);    elsefprintf(fp,"%10d",f[i]);    }fclose(fp); 
}

 fscanf函数

fscanf 函数从指定文件中按指定格式读入数据,与 scanf 函数作用相似。 scanf 是从键盘输入,而 fscanf 是从文件读入。
fscanf 函数的一般形式为:
fscanf 文件指针,格式字符串,输入表列 );

13.7】以指定格式读取13.5】中生成的文件file_data.txt中的数据,并输出到屏幕上

编写程序如下:

#include<stdio.h>#include<stdlib.h>void main(){    FILE *fp;int i,j; double m,n; char s1[100],s2[100],s3[100],s4[100]; if( (fp = fopen("file_data.txt","r")) == NULL ){    printf("can not open the file\n");exit(0);}fscanf(fp,"%s%s%s%s",s1,s2,s3,s4); //读入四个单词fscanf(fp,"%d%d",&i,&j);//读入两个整型数据 fscanf(fp,"%lf%lf",&m,&n); //读入两个double类型数据printf("%s %s %s %s\n",s1,s2,s3,s4); printf("%d %d\n",i,j); printf("%lf %lf\n",m,n);fclose(fp);}

fwrite函数

fwrite 函数的作用是将指定长度的数据写入指定文件中。它的一般形式为:
  fwrite buffer size count 文件指针 );
buffer 是数据块的指针,一个写入数据的内存地址
size 是每个数据块的字节数
count 是要写入多少个 size 字节的数据块
fwrite 函数主要用于写入二进制文件,因此在打开文件的时候需要以“ wb” 方式打开
struct Book_Type
{   char name[10];//书名int price;//价格char author[10];//作者名
};
如果要将书的信息写入到磁盘中,如下代码实现:
for(i=0;i<2;i++)
{fwrite(&book[i],sizeof(struct Book_Type),1,fp);
}

13.8】通过键盘输入所有2本书的信息,并存储在文本文件file_data.txt中。

编写程序如下:

#include<stdio.h>#include<stdlib.h>void main(){    struct Book_Type{     char name[10];//书名int price;//价格char author[10];//作者名};FILE *fp;struct Book_Type book[2];int i;if( (fp = fopen("file_data.txt","wb")) == NULL ){    printf("can not open the file\n");exit(0);}printf("input the book info: \n");for(i=0;i<2;i++){    scanf("%s%d%s",book[i].name,&book[i].price,book[i].author);   fwrite(&book[i],sizeof(struct Book_Type),1,fp);   //读入一条记录}fclose(fp);}

因为是以二进制方式保存,所以记事本中的内容显示为乱码。

fread函数

fread 函数的作用是从指定文件中读入指定长度的数据块。它的一般形式为:
  fread buffer size count 文件指针 );
buffer 是数据块的指针,一个读入数据的内存地址
size 是每个数据块的字节数
count 是要读入多少个 size 字节的数据块。
fread 函数主要用于读取二进制文件,因此在打开文件的时候需要以“ rb” 方式打开。
例如:
fread(data,2,3,fp);
data 是一个整型数组名,一个整型数据占用 2 个字节的内存空间
此函数调用的功能是从 fp 所指向的文件中读入 3 次(每次 2 个字节)数据,并存储到整型数组 data

13.9】13.8】中已经存有book信息的文件打开,读出信息后显示在屏幕上。

编写程序如下:

#include<stdio.h>#include<stdlib.h>void main(){    struct Book_Type{     char name[10];//书名int price;//价格char author[10];//作者名};FILE *fp;struct Book_Type book[2];int i;if( (fp = fopen("file_data.txt","rb")) == NULL ){    printf("can not open the file\n");exit(0);}printf("the book info: \n");   for(i=0;i<2;i++)fread(&book[i],sizeof(struct Book_Type),1,fp);for(i=0;i<2;i++)printf("name=%s,price=%d,author=%s\n",book[i].name,book[i].price,book[i].author);fclose(fp);}

rewind函数

rewind 函数的作用是使位置指针重新返回指定文件的开头。
它的一般形式为:
  rewind (文件指针);
此函数没有返回值。
在文件操作中会移动文件的位置指针,可以使用 rewind 函数将位置指针回到文件头部。

13.10】将指定字符串数据写入文本文件file_data.txt中,并将文件的位置指针重新定位到文件开头,读出文件中的第1个字符数据后显示在屏幕上。

编写程序如下:

#include<stdio.h>#include<stdlib.h>void main(){    FILE *fp; char s[]="abcdefghijklmnopqrstuvwxyz";char c;if( (fp = fopen("file_data.txt","w+")) == NULL ){        printf("can not open the file\n");exit(0);}fprintf(fp,"%s",s);  //向文件中写入字符串rewind(fp);  //指针返回开始fscanf(fp,"%c",&c); //读入一个字符printf("The first character is: %c\n",c);fclose(fp);}

 fseek函数

fseek 函数的作用是将文件的位置指针移到指定位置
它的一般形式为:
  fseek( 文件指针,位移量,起始点 )
在文件操作中可能需要从文件中的某个位置开始进行读写,此时可以使用 fseek 函数将位置指针移动到指定位置,实现随机读写
位移量是以“起始点”为基准移动的字节数( long
+” 表示向后移动
-” 表示向前移动。

例如:
fs eek(fp,40L,0);  
  // 将位置指针移动到文档开始后 40 个字节的位置
fseek(fp,30L,1); 
  // 将位置指针移动到当前位置后 30 个字节的位置
fseek(fp,-20L,2); 
  // 将位置指针移 动到文档末尾前 20 个字节的位置

 

13.11】将指定字符串数据写入文本文件file_data.txt中,并将文件的位置指针定位到第5个字符之后,读出第6个字符并显示在屏幕上。

编写程序如下:

#include<stdio.h>#include<stdlib.h>void main(){    FILE *fp; char s[]="abcdefghijklmnopqrstuvwxyz";char c;if( (fp = fopen("file_data.txt","w+")) == NULL ){    printf("can not open the file\n");exit(0);}fprintf(fp,"%s",s);fseek(fp,5L,0);fscanf(fp,"%c",&c);printf("The first character is: %c\n",c);fclose(fp);}

 ftell函数

ftell 函数的作用是返回文件位置指针的位置,给出当前位置指针相对于文件头的字节数,返回值为 long 型。当函数调用出错时,函数返回 -1L
一般形式为
  ftell (文件指针);

13.12】求出文件中包含的字节数。

分析:

先将文件的位置指针移到文件末尾,再通过返回位置指针的位置来取得文件的字节数。

#include<stdio.h>#include<stdlib.h>void main(){    FILE *fp;long l;if( (fp = fopen("file_data.txt","r")) == NULL ){    printf("can not open the file\n");exit(0);}fseek(fp,0L,SEEK_END);   //将文件的位置指针移到文件末尾l=ftell(fp);        //返回位置指针的位置fclose(fp);printf("the length of file is %ld\n",l);}

 feof函数

feof 函数的作用是判断文件指针是否在文件末尾,如果在文件末尾,则返回非 0 ,否则返回 0
一般形式为
  feof (文件指针);

13.13】判断文件指针是否在文本文件file_data.txt的末尾,并给出相应提示。

编写程序如下:

#include<stdio.h>#include<stdlib.h>void main(){    FILE *fp;char ch;if( (fp = fopen("file_data.txt","r")) == NULL ){    printf("can not open the file\n");exit(0);}do{    ch=fgetc(fp);putchar(ch);}while (!feof(fp));   //判断是否到达文件尾if(feof(fp)) printf("\nWe have reached end-of-file\n");//判断是否到达文件尾fclose(fp);}

ferror函数

ferror 函数的作用是检查文件中是否有错误,如果有错,则返回非 0 ,否则返回 0
它的一般形式为
ferror (文件指针);

13.14】判断的文本文件file_data.txt是否有错误,并给出相应提示。

编写程序如下:

#include<stdio.h>#include<stdlib.h>void main(){    FILE *fp;if( (fp = fopen("file_data.txt","r")) == NULL ){    printf("can not open the file\n");exit(0);}if(ferror(fp))printf("Error reading from file_data.txt\n");elseprintf("There is no error\n");fclose(fp);}

相关文章:

C语言下的文件详解

主要内容 文件概述文件指针文件的打开与关闭文件的读写 文件 把输入和输出的数据以文件的形式保存在计算机的外存储器上&#xff0c;可以确保数据能随时使用&#xff0c;避免反复输入和读取数据 文件概述 文件是指一组相关数据的有序集合 文件是存储数据的基本单位&#…...

Oracle PL / SQL块结构

在PL / SQL中&#xff0c;最小的有意义的代码分组被称为块。 块代码为变量声明和异常处理提供执行和作用域边界。 PL / SQL允许您创建匿名块和命名块。 命名块可以是包&#xff0c;过程&#xff0c;函数&#xff0c;触发器或对象类型。 PL / SQL是SQL的过程语言扩展&#x…...

MySQL的安装和启动

安装 版本 1&#xff0c;社区版&#xff1a;免费&#xff0c;不提供任何技术支持 2&#xff0c;商业版&#xff1a;可以试用30天&#xff0c;官方提供技术支持下载 1&#xff0c;下载地址&#xff1a;https://dev.mysql.com/downloads/mysql/ 2&#xff0c;安装&#xff1a;傻…...

Prometheus概述

1.什么是prometheus Prometheus 是一个开源的服务监控系统和时序数据库&#xff0c;其提供了通用的数据模型和快捷数据采集、存储和查询接口。它的核心组件Prometheus server会定期从静态配置的监控目标或者基于服务发现自动配置的自标中进行拉取数据&#xff0c;当新拉取到的…...

【SQL】什么是最左前缀原则/最左匹配原则

最左前缀原则&#xff08;或最左匹配原则&#xff09;是关系型数据库在使用复合索引时遵循的一条重要规则。该原则指的是&#xff0c;当查询条件使用复合索引时&#xff0c;查询优化器会首先使用索引的最左边的列&#xff0c;依次向右匹配&#xff0c;直到不再满足查询条件为止…...

java项目配置logback日志

在resource目录下添加logback配置文件 <?xml version"1.0" encoding"UTF-8"?> <configuration scan"true" scanPeriod"60 seconds" debug"false"><property name"log_dir" value"/APL/log…...

Python入门 2024/7/6

目录 元组的定义和操作 字符串的定义和操作 字符串 字符串的替换 字符串的分割 字符串的规整操作&#xff08;去除前后空格&#xff09; 字符串的规整操作&#xff08;去掉前后指定字符串&#xff09; 操作 字符串的替换 字符串的分割 字符串的规整操作 统计字符串的…...

ChatGPT4深度解析:探索智能对话新境界

大模型chatgpt4分析功能初探 目录 1、探测目的 2、目标变量分析 3、特征缺失率处理 4、特征描述性分析 5、异常值分析 6、相关性分析 7、高阶特征挖掘 1、探测目的 1、分析chat4的数据分析能力&#xff0c;提高部门人效 2、给数据挖掘提供思路 3、原始数据&#xf…...

触底加载的两种思路(以vue3前端和nodejs后端为例)

一:首先,nodejs后端的代码都是一样的. 需要前端返回page参数,然后nodejs逻辑进行处理,截取页数和每页条数和总条数, 总条数用来作为判断是否有数据的条件,也可以不用,注意看下文 一:不用获取容器高度的. pinia中进行的axios请求处理 在vue文件中进行pinia中数据的导入,继续进…...

tobias实现支付宝支付

tobias是一个为支付宝支付SDK做的Flutter插件。 如何使用 你需要在pubspec.yaml中配置url_scheme。url_scheme是一个独特的字符串&#xff0c;用来重新启动你的app&#xff0c;但是请注意字符串“_”是不合法的。 在iOS端&#xff0c;你还需要配置并传入一个universal link。…...

【音视频 | RTSP】RTSP协议详解 及 抓包例子解析(详细而不赘述)

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; &#x1f923;本文内容&#x1f923;&a…...

SQL Server 2022 中的 Tempdb 性能改进非常显著

无论是在我的会话中还是在我写的博客中&#xff0c;Tempdb 始终是我的话题。然而&#xff0c;当谈到 SQL Server 2022 中引入的重大性能变化时&#xff0c;我从未如此兴奋过。他们解决了我们最大的性能瓶颈之一&#xff0c;即系统页面闩锁并发。 在 SQL Server 2019 中&#x…...

C++ Lambda表达式第二篇, Lambda表达式

C Lambda表达式 Lambda 捕获含有模板参数的Lambda表达式无模板参数的Lambda表达式 Lambda 捕获 captures是零个或多个捕获的逗号分隔列表&#xff0c;可以选择以capture-default开头。捕获列表定义可从 lambda 函数体内访问的外部变量。唯一的捕获默认值是 &&#xff0c;…...

Linux系统的介绍和常用命令

文章目录 介绍常用命令文件和目录操作文件内容操作系统管理命令网络命令 &#x1f388;个人主页&#xff1a;程序员 小侯 &#x1f390;CSDN新晋作者 &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 ✨收录专栏&#xff1a;Liunx系统 ✨文章内容&#xff1a;Liunx系统介绍 &…...

IDEA安装IDE Eval Reset插件,30天自动续期,无限激活

第一步&#xff1a; 下载idea 注意&#xff1a;版本要是2021.2.2以下 第二步&#xff1a;快捷键CtrlAlts打开设置 第三步&#xff1a;打开下图中蓝色按钮 第四步&#xff1a;点击弹窗的 “” &#xff0c;并输入 plugins.zhile.io 点击 “ok” 第五步&#xff1a;搜索IDE Ea…...

【C++】初步认识C++

1. 初识C1.1 C概念相关1.2 C发展史及其重要性1.2.1 发展史1.2.2 重要性 2. C关键字3. 命名空间4. 输入和输出 个人主页&#xff1a;C_GUIQU 归属专栏&#xff1a;【C学习】 1. 初识C 1.1 C概念相关 C语言是结构化和模块化的语言&#xff0c;适合处理较小规模的程序。 【来源】…...

【Python数据分析与可视化】:使用【Matplotlib】实现销售数据的全面分析 ——【Matplotlib】数模学习

目录 安装Matplotlib 1.打开PyCharm&#xff1a; 2.打开终端&#xff1a; 3.安装Matplotlib&#xff1a; 4.确认安装&#xff1a; 导入Matplotlib 创建简单的折线图 代码解析&#xff1a; 创建子图 代码解析&#xff1a; 创建柱状图 代码解析&#xff1a; 创建散点…...

Docker加速器配置指南:提升镜像下载速度的秘诀 加速安装Mysql Redis ES

在安装 Docker 镜像时&#xff0c;由于官方镜像下载速度较慢&#xff0c;我们可以使用阿里云的镜像加速器来提升下载速度。 使用阿里云镜像加速器 首先&#xff0c;找到并配置阿里云的镜像加速器。安装教程如下&#xff1a; 登录阿里云&#xff0c;进入容器镜像服务。直达链…...

32单片机,C语言与汇编联合编译的几种方式

适用编译器&#xff1a;Keil5 方式一&#xff1a; 单独创建一个.s汇编文件&#xff0c;在汇编文件内对函数进行EXPORT声明 r0寄存器是函数传入的第一个参数&#xff0c;r1寄存器是函数传入的第二个参数&#xff0c;以次类推。参数最多不确定是到r4为止&#xff0c;还是到r12…...

基于GWO-CNN-BiLSTM数据回归预测(多输入单输出)-灰狼优化算法优化CNN-BiLSTM

基于GWO-CNN-BiLSTM数据回归预测(多输入单输出)-灰狼优化算法优化CNN-BiLSTM 1.数据均为Excel数据&#xff0c;直接替换数据就可以运行程序。 2.所有程序都经过验证&#xff0c;保证程序可以运行。 3.具有良好的编程习惯&#xff0c;程序均包含简要注释。 获取方式 https:/…...

自动控制:反馈控制

自动控制&#xff1a;反馈控制 反馈控制&#xff08;Feedback Control&#xff09;是一种在控制系统中通过测量输出信号&#xff0c;并将其与期望信号进行比较&#xff0c;产生误差信号&#xff0c;再根据误差信号调整输入来达到控制目标的方法。反馈控制是自动控制系统中最常…...

sqlite 数据库 介绍

文章目录 前言一、什么是 SQLite &#xff1f;二、语法三、SQLite 场景四、磁盘文件 前言 下载 目前已经出到了&#xff0c; Version 3.46.0 SQLite&#xff0c;是一款轻型的数据库&#xff0c;是遵守ACID的关系型数据库管理系统&#xff0c;它包含在一个相对小的C库中。它是…...

【机器学习】机器学习重塑广告营销:精准触达,高效转化的未来之路

&#x1f4dd;个人主页&#x1f339;&#xff1a;Eternity._ &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; ❀目录 &#x1f4d2;1. 引言&#x1f4d9;2. 机器学习基础与广告营销的结合&#x1f9e9;机器学习在广告营销中的核心应用领域&#x1f339;用…...

常见的Java运行时异常

常见的Java运行时异常 1、ArithmeticException&#xff08;算术异常&#xff09;2、ClassCastException &#xff08;类转换异常&#xff09;3、IllegalArgumentException &#xff08;非法参数异常&#xff09;4、IndexOutOfBoundsException &#xff08;下标越界异常&#xf…...

CANoe的capl调用Qt制作的dll

闲谈 因为Qt封装了很多个人感觉很好用的库&#xff0c;所以一直想通过CAPL去调用Qt实现一些功能&#xff0c;但是一直没机会&#xff08;网络上也没看到这方面的教程&#xff09;&#xff0c;这次自己用了两天&#xff0c;踩了很多坑&#xff0c;终于是做成了一个初步的调用方…...

论如何搭建属于自己的服务器?

在现如今的数字化时代中&#xff0c;为了能够搭建网站和运行应用程序&#xff0c;很多人选择搭建属于自己的服务器&#xff0c;下面我们就来了解一下如何搭建服务器吧&#xff01; 搭建服务器我们首先需要选择适合自身需求的硬件设备&#xff0c;其中包含内存、CPU和存储等配置…...

【C++ OpenCV】机器视觉-二值图像和灰度图像的膨胀、腐蚀、开运算、闭运算

原图 结果图 //包含头文件 #include <opencv2/opencv.hpp>//命名空间 using namespace cv; using namespace std;//全局函数声明部分//我的腐蚀运算 Mat Erode(Mat src, Mat Mask, uint32_t x0, uint32_t y0) {uint32_t x 0, y 0;Mat dst(src.rows, src.cols, CV_8U…...

STMF4学习笔记RTC(天空星)

前言&#xff1a;本篇笔记参考嘉立创文档&#xff0c;连接放在最后 #RTC相关概念定义 Real-Time Clock 缩写 RTC 翻译 实时时钟&#xff0c;是单片机片内外设的一种&#xff0c;作用于提供准确的时间还有日期&#xff0c;这个外设有独立的电源&#xff0c;当单片机停止供电…...

vue数组变化的侦测***

数组变化的侦测 变更方法 vue能够侦听响应式数组的变更方法&#xff0c;并在他们被调用时触发相关更新。这些变更方法包括&#xff1a; push()pop()shift()unshift()splice()sort()reverse() 替换一个数组 变更方法&#xff0c;顾名思义&#xff0c;就是会对调用他们的原数组进…...

k8s-第十节-Ingress

Ingress 介绍 Ingress 为外部访问集群提供了一个 统一 入口&#xff0c;避免了对外暴露集群端口&#xff1b;功能类似 Nginx&#xff0c;可以根据域名、路径把请求转发到不同的 Service。可以配置 https 跟 LoadBalancer 有什么区别&#xff1f; LoadBalancer 需要对外暴露…...

webrtc gcc详解

webrtc的gcc算法(Google Congestion Control)&#xff0c;貌似国内很多文章都没有细讲&#xff0c;原理是怎么样的&#xff0c;具体怎么进行计算的。这里详解一下gcc。 gcc算法&#xff0c;主要涉及到&#xff1a; 拥塞控制的关键信息和公式 卡曼滤波算法 gcc如何使用卡曼滤…...

Linux多进程和多线程(七)进程间通信-信号量

进程间通信之信号量 资源竞争 多个进程竞争同一资源时&#xff0c;会发生资源竞争。 资源竞争会导致进程的执行出现不可预测的结果。 临界资源 不允许同时有多个进程访问的资源, 包括硬件资源 (CPU、内存、存储器以及其他外 围设备) 与软件资源(共享代码段、共享数据结构) …...

【项目日记(一)】梦幻笔耕-数据层实现

❣博主主页: 33的博客❣ ▶️文章专栏分类:项目日记◀️ &#x1f69a;我的代码仓库: 33的代码仓库&#x1f69a; &#x1faf5;&#x1faf5;&#x1faf5;关注我带你了解更多项目内容 目录 1.前言2.后端模块3数据库设计4.mapper实现4.1UserInfoMapper4.2BlogMapper 5.总结 1.…...

ElementUI的中国省市区级联数据插件element-china-area-data

安装 npm install element-china-area-data -S import 使用 import {provinceAndCityData,pcTextArr,regionData,pcaTextArr,codeToText, } from "element-china-area-data"; provinceAndCityData省市二级联动数据,汉字+coderegionData省市区三级联动数据pcTextAr…...

Kotlin算法:把一个整数向上取值为最接近的2的幂指数值

Kotlin算法&#xff1a;把一个整数向上取值为最接近的2的幂指数值 import kotlin.math.ln import kotlin.math.powfun main(args: Array<String>) {val number intArrayOf(2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18)number.forEach {println("$…...

简单且循序渐进地查找软件中Bug的实用方法

“Bug”这个词常常让许多开发者感到头疼。即使是经验丰富、技术娴熟的开发人员在开发过程中也难以避免遭遇到 Bug。 软件中的故障会让程序员感到挫败。我相信在你的软件开发生涯中&#xff0c;也曾遇到过一些难以排查的问题。软件中的错误可能会导致项目无法按时交付。因此&…...

基于springboot+vue+uniapp的高校宿舍信息管理系统小程序

开发语言&#xff1a;Java框架&#xff1a;springbootuniappJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#…...

(完整音频)DockerHub、OpenAI、GitCode,脱钩时代,我们该如何自处?

本期主播 朱峰&#xff1a;「津津乐道播客网络」创始人&#xff0c;产品及技术专家。&#xff08;微博&#xff1a;zhufengme&#xff09;高春辉&#xff1a;「科技乱炖」主播。“中国互联网站长第一人”&#xff0c;科技、互联网领域的连续创业者。&#xff08;微博&#xff1…...

macos 10.15系统下载包,macOS Catalina for mac

macOS Catalina 让你喜欢的种种 Mac 体验都更进一步。你可以领略音乐、播客这两款全新 Mac app 的表演&#xff1b;在 Mac 上畅享各款自己心爱的 iPad app&#xff1b;拿起 iPad 和 Apple Pencil&#xff0c;拓展工作空间&#xff0c;释放创意灵感&#xff1b;再打开那些平时常…...

uni.showShareMenu({}) 和 uni.showShareImageMenu({}) 的区别

ChatGPT uni.showShareMenu({}) 和 uni.showShareImageMenu({}) 是 Uni-app 中两个不同的 API&#xff0c;它们的作用和用法有所不同&#xff1a; uni.showShareMenu({}) 作用&#xff1a;用于显示当前页面的分享菜单&#xff0c;通常显示在页面的右上角&#xff08;类似于微…...

Spring Boot logback 日志文件配置

引入依赖 <dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.24</version></dependency>logback-spring.xml 配置 <?xml version"1.0" encoding"UTF-8&quo…...

240705_昇思学习打卡-Day17-基于 MindSpore 实现 BERT 对话情绪识别

240705_昇思学习打卡-Day17-基于 MindSpore 实现 BERT对话情绪识别 近期确实太忙&#xff0c;此处仅作简单记录&#xff1a; 模型简介 BERT全称是来自变换器的双向编码器表征量&#xff08;Bidirectional Encoder Representations from Transformers&#xff09;&#xff0c…...

图像处理调试软件推荐

对于图像处理的调试&#xff0c;使用具有图形用户界面&#xff08;GUI&#xff09;且支持实时调整和预览的图像处理软件&#xff0c;可以大大提高工作效率。以下是几款常用且功能强大的图像处理调试软件推荐&#xff1a; ImageJ/FijiMATLABOpenCV with GUI LibrariesNI Vision …...

Mybatis实现RBAC权限模型查询

RBAC权限模型 Role-Based Access Control&#xff0c;中文意思是&#xff1a;基于角色&#xff08;Role&#xff09;的访问控制。这是一种广泛应用于计算机系统和网络安全领域的访问控制模型。 简单来说&#xff0c;就是通过将权限分配给➡角色&#xff0c;再将角色分配给➡用…...

最短路算法——差分约束

差分约束 (1) 求不等式组的可行解 源点&#xff1a;从源点出发&#xff0c;一定可以走到所有的边求可行解步骤&#xff1a; 先将每个不等式 x i ≤ x j c x_i \le x_j c xi​≤xj​c,转化成一条从 s j s_j sj​走到 s i s_i si​&#xff0c;长度为 c k c_k ck​ 的一条边找…...

Log4j日志框架讲解(全面,详细)

目录 Log4j概述 log4j的架构&#xff08;组成&#xff09; Loggers Appenders Layouts 快速入门 依赖 java代码 日志的级别 log4j.properties 自定义Logger 总结&#xff1a; Log4j概述 Log4j是Apache下的一款开源的日志框架&#xff0c;通过在项目中使用 Log4J&…...

LeetCode 35, 242, 994

目录 35. 搜索插入位置题目链接标签思路代码 242. 有效的字母异位词题目链接标签思路代码 994. 腐烂的橘子题目链接标签思路代码 35. 搜索插入位置 题目链接 35. 搜索插入位置 标签 数组 二分查找 思路 本题与 704. 二分查找 十分相似&#xff0c;只不过本题在找不到 tar…...

ctfshow-web入门-文件包含(web87)巧用 php://filter 流绕过死亡函数的三种方法

目录 方法1&#xff1a;php://filter 流的 base64-decode 方法 方法2&#xff1a;通过 rot13 编码实现绕过 方法3&#xff1a;通过 strip_tags 函数去除 XML 标签 除了替换&#xff0c;新增 file_put_contents 函数&#xff0c;将会往 $file 里写入 <?php die(大佬别秀了…...

adb shell ps -T打印出来参数的含义,以及D,T,Z代表的状态含义是什么?

在Android系统中&#xff0c;使用adb shell ps命令可以查看当前系统中运行的进程信息。当你添加-T选项时&#xff08;注意&#xff0c;标准的ps命令在Android的adb shell中可能不直接支持-T选项&#xff0c;这通常与Linux中的ps命令略有不同&#xff09;&#xff0c;你可能是想…...

leetcode77组合——经典回溯算法

本文主要讲解组合的要点与细节&#xff0c;以及回溯算法的解题步骤&#xff0c;按照步骤思考更方便理解 c和java代码如下&#xff0c;末尾 给定两个整数 n 和 k&#xff0c;返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按 任何顺序 返回答案。 具体要点&#xff1a; …...