当前位置: 首页 > 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:/…...

Chapter03-Authentication vulnerabilities

文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...

FastAPI 教程:从入门到实践

FastAPI 是一个现代、快速&#xff08;高性能&#xff09;的 Web 框架&#xff0c;用于构建 API&#xff0c;支持 Python 3.6。它基于标准 Python 类型提示&#xff0c;易于学习且功能强大。以下是一个完整的 FastAPI 入门教程&#xff0c;涵盖从环境搭建到创建并运行一个简单的…...

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明

AI 领域的快速发展正在催生一个新时代&#xff0c;智能代理&#xff08;agents&#xff09;不再是孤立的个体&#xff0c;而是能够像一个数字团队一样协作。然而&#xff0c;当前 AI 生态系统的碎片化阻碍了这一愿景的实现&#xff0c;导致了“AI 巴别塔问题”——不同代理之间…...

vue3 定时器-定义全局方法 vue+ts

1.创建ts文件 路径&#xff1a;src/utils/timer.ts 完整代码&#xff1a; import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...

【JavaWeb】Docker项目部署

引言 之前学习了Linux操作系统的常见命令&#xff0c;在Linux上安装软件&#xff0c;以及如何在Linux上部署一个单体项目&#xff0c;大多数同学都会有相同的感受&#xff0c;那就是麻烦。 核心体现在三点&#xff1a; 命令太多了&#xff0c;记不住 软件安装包名字复杂&…...

2023赣州旅游投资集团

单选题 1.“不登高山&#xff0c;不知天之高也&#xff1b;不临深溪&#xff0c;不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...

A2A JS SDK 完整教程:快速入门指南

目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库&#xff…...

站群服务器的应用场景都有哪些?

站群服务器主要是为了多个网站的托管和管理所设计的&#xff0c;可以通过集中管理和高效资源的分配&#xff0c;来支持多个独立的网站同时运行&#xff0c;让每一个网站都可以分配到独立的IP地址&#xff0c;避免出现IP关联的风险&#xff0c;用户还可以通过控制面板进行管理功…...

jdbc查询mysql数据库时,出现id顺序错误的情况

我在repository中的查询语句如下所示&#xff0c;即传入一个List<intager>的数据&#xff0c;返回这些id的问题列表。但是由于数据库查询时ID列表的顺序与预期不一致&#xff0c;会导致返回的id是从小到大排列的&#xff0c;但我不希望这样。 Query("SELECT NEW com…...

yaml读取写入常见错误 (‘cannot represent an object‘, 117)

错误一&#xff1a;yaml.representer.RepresenterError: (‘cannot represent an object’, 117) 出现这个问题一直没找到原因&#xff0c;后面把yaml.safe_dump直接替换成yaml.dump&#xff0c;确实能保存&#xff0c;但出现乱码&#xff1a; 放弃yaml.dump&#xff0c;又切…...