【C语言】探索文件读写函数的全貌

2024-06-04 7796阅读

【C语言】探索文件读写函数的全貌 第1张

【C语言】探索文件读写函数的全貌 第2张

【C语言】探索文件读写函数的全貌 第3张

🌈个人主页:是店小二呀

🌈C语言笔记专栏:C语言笔记

🌈C++笔记专栏: C++笔记

🌈喜欢的诗句:无人扶我青云志 我自踏雪至山巅

【C语言】探索文件读写函数的全貌 第2张

🔥引言

本章将介绍文件读取函数的相关知识和展示使用场景,通过这些函数就可以打开文件与我们之间的桥梁。

文章目录

  • 一、文件的打开和关闭
  • 二、文件的打开模式
  • 三、文件路径
  • 四、文件打开和关闭函数
    • 4.1 fopen()
    • 4.2 fclose()
    • 五、顺序读写函数
      • 5.1 fputc()
      • 5.2 fgetc()
      • 5.3 实现文件拷贝
      • 5.4 fputs()
      • 5..5 fgets()
      • 5.6 fscanf和fprintf函数
      • 5.7 fprintf()
      • 5.8 fscanf()
      • 5.9 sprintf和sscanf函数
        • 5.9.1 sprintf()
        • 5.9.2 sscanf
        • 小总结
        • 六、二进制的方式读写函数
          • 6.1 fwrite()
          • 6.2 fread()
          • 七、文件的随机读写
            • 7.1 fseek()
            • 7.2 ftell()
            • 7.3 rewind()
            • 八、文件读取结束的判断
              • 8.1 ferror()
              • 8.2 feof()
              • 小总结
              • 检查文件读取结束场景
              • 九、文件缓冲区

                一、文件的打开和关闭

                如果需要对文件进行一些读写操作,那么首先就需要先打开文件,在使用完以后关闭文件,所以最基本是打开文件和关闭文件。

                ANSIC规定使用fopen函数来打开文件,fclose来关闭文件

                打开文件
                    FILE *fopen(const char *filename,const char *mode);
                关闭文件
                    FILE *fclose(FILE *stream);
                

                二、文件的打开模式

                mode表示文件的打开模式,下面都是文件的打开模式 :

                ⽂件使⽤⽅式含义如果指定⽂件不存在
                “r”(只读)为了输⼊数据,打开⼀个已经存在的⽂本⽂件出错
                “w”(只写)为了输出数据,打开⼀个⽂本⽂件建⽴⼀个新的⽂件
                “a”(追加)向⽂本⽂件尾添加数据建⽴⼀个新的⽂件
                “rb”(只读)为了输⼊数据,打开⼀个⼆进制⽂件出错
                “wb”(只写)为了输出数据,打开⼀个⼆进制⽂件建⽴⼀个新的⽂件
                “ab”(追加)向⼀个⼆进制⽂件尾添加数据建⽴⼀个新的⽂件
                “r+”(读写)为了读和写,打开⼀个⽂本⽂件出错
                “w+”(读写)为了读和写,建议⼀个新的⽂件建⽴⼀个新的⽂件
                “a+”(读写)打开⼀个⽂件,在⽂件尾进⾏读写建⽴⼀个新的⽂件
                “rb+”(读写)为了读和写打开⼀个⼆进制⽂件出错
                “wb+”(读写)为了读和写,新建⼀个新的⼆进制⽂件建⽴⼀个新的⽂件
                “ab+”(读写)打开⼀个⼆进制⽂件,在⽂件尾进⾏读和写建⽴⼀个新的⽂件

                三、文件路径

                在打开和关闭文件一般直接输入指定的文件名,当然也可以根据文件的路径对该文件进行操作。

                路径分为:

                • 绝对路径
                • 相对路径
                • . 表示当前路径
                • … 上一级路径
                  对此当前文件test1.txt在D:\code2424\Document(绝对路径)
                  FILE* pf = fopen("C:\Users\zpeng\Desktop\test.txt", "w");   
                  当test1.txt在其他文件夹中,可以通过上面表示的关系寻找
                  FILE* pf = fopen(".\..\..\hehe\test.txt", "w");
                  

                  四、文件打开和关闭函数

                  4.1 fopen()

                  FILE *fopen(const char * filename, const char * mode)
                  

                  【说明】:

                  • 功能:打开其名称在参数 filename 中指定的文件,并将其与流相关联,该流可在将来的操作中通过返回的 FILE指针进行标识。
                  • 返回值:如果文件成功打开,该函数将返回指FILE对象的指针,该对象可用于在将来的操作中标识流,如果文件没有成功打开,则将返回NULL。
                  • 允许对流执行的操作以及如何执行这些操作由 mode 参数定义

                    4.2 fclose()

                    int fclose(FLIE *stream)
                    

                    【说明】:

                    • 功能:关闭与流关联的文件并取消关联
                    • 与流关联的所有内部缓冲区都将与其解除关联并刷新:写入任何未写入的输出缓冲区的内容,并丢弃任何未写入输入缓冲区的内容。(更新缓冲区)
                    • 返回值:流关闭成功,则返回0。关闭失败,返回EOF

                      五、顺序读写函数

                      这里所有的输入流、输出流分别指stdin(标准输入流)、stdout(标准输出流)和文件流

                      5.1 fputc()

                      【C语言】探索文件读写函数的全貌 第5张

                      【函数部分说明】:

                      功能上:

                      将字符写入流并推进位置指示器,然后自动前进1。适用于所有输入流(字符输入到流中)

                      参数部分上:

                      character:

                      • 将要写入的字符的整型提升
                      • 写入时,该值在内部转换为无符号字符

                        stream:

                        • 指向标识输出流的FILE对象指针

                          返回值:

                          • 成功,将返回写入的字符。发生写入错误,则返回EOF并设置错误指示符(ferror)
                            int main()
                            {
                            	FILE* pf = fopen("test1.txt", "w");
                            	if (pf == NULL)
                            	{
                            		perror("fopen fail!!!");
                            			return;
                            	}
                            	fputc('d', pf);
                            	fputc('e', pf);
                            	fclose(pf);
                            	pf = NULL;
                            	return 0;
                            }
                            

                            【C语言】探索文件读写函数的全貌 第6张

                            【使用说明】:

                            • 首次调用fputc函数将字符‘d’写入到文件当中,位置指示器向前+1就会指向‘d’的下一个位置,第二次fputc函数时,字符‘e’在这个位置输入进去。
                            • 注意这里对流执行写操作"w"模式
                            • 对于stream可以是文件流也可以是标准流

                              【练习】:使用fputc将A ~Z个字符输入到指定文件和显示器中

                              int main()
                              {
                              	FILE* pf = fopen("test1.txt", "w");
                              	if (pf == NULL)
                              	{
                              		perror("fopen fail!!!");
                              		return;
                              	}
                              	for (char i = 'A'; i 
                              	fputc(i, pf);//输入到文件中
                              	fputc(i, stdout);//输入到显示器中
                              	}
                              	fclose(pf);
                              	pf = NULL;
                              	return 0;
                              }
                              
                                  FILE* pf = fopen("test1.txt", "r");
                                  if (pf == NULL)
                                  {
                                      perror("fopen fail!!!");
                                      return;
                                  }	
                                  char ch;
                                  //ch用于接收fgetc从流中获得的字符
                                  ch = fgetc(pf);
                                  printf("%c", ch);
                                  
                                  ch = fgetc(pf);
                                  printf("%c", ch);
                                  fclose(pf);
                                  pf = NULL;
                                  return 0;
                              }
                              
                              p【使用说明】:/p ulli这里对流的操作采用mode是"r"模式/lili此时在指定文件提前写入数据,使用fgetc读取该文中的数据,第一次使用时读取‘h’字符,指示器++1,指向‘e’字符位置,在第二次使用读取该字符。/lili当然也可以直接从键盘读取数据(使用标准输入流stdin)–>改为ch = fgetc(stdin);

                              5.3 实现文件拷贝

                              通过以上两个函数,我们可以用来实现文件拷贝的场景

                              int main()
                              {
                                  FILE* pfread = fopen("data1.txt", "r");
                                  if (pfread == NULL)
                                  {
                                      perror("fopen fail!!!");
                                      return;
                                  }	
                                  FILE* pfwrite = fopen("data2.txt", "w");
                                  if (pfwrite == NULL)
                                  {
                                      fclose(pfread);//读文件操作没有必要
                                      pfread=NULL;
                                      perror("fopen fail!!!");
                                      return;
                                  }
                                  
                                  char ch;
                                  while ((ch = fgetc(pfread)) != EOF)
                                  {
                                      fputc(ch, pfwrite);
                                  }
                                  fclose(pfread);
                                  fclose(pfwrite);
                                  return 0;
                              }
                              

                              【C语言】探索文件读写函数的全貌 第7张

                              【使用说明】:

                              1. 这里先提前准备好两个文件,并且在data1.txt中提前输入数据
                              2. 这里需要对两个不同文件使用不同mode打开,对data1.txt使用读的形式,而data2.txt是写的形式打开
                              3. 在while循环中一个从data1.txt读取字符,同时一个向data2.txt输入字符,直到读取完成或者发生错误

                              5.4 fputs()

                              【C语言】探索文件读写函数的全貌 第8张

                              【函数部分说明】:

                              • 功能:文本行输入函数,将str指向的字符串写入流中,从指定的地址开始复制,直到结束标志
                                int main()
                                {
                                    FILE * pf = fopen("test1.txt", "w");
                                    if (pf == NULL)
                                    {
                                        perror("fopen fail!!!");
                                        return;
                                    }	
                                    //fputs("hellow world", pf); -- 将字符串输入到文件流中
                                    fputs("hellow world", stdout); -- 将字符串输入到输出流中(打印到屏幕上)
                                    fclose(pf);
                                    pf=NULL;
                                    return 0;
                                }
                                

                                5…5 fgets()

                                ’字符不会复制到流中)
                              • 返回值:成功,返回一个非负值,失败,则返回EOF
                              • 文本行输入函数,从流中获得字符串,直到读取到num-1个字符或者在达到换行符或文件末尾(前者为准)。

                              • int main()
                                {
                                    FILE* pf = fopen("test1.txt", "r");
                                    if (pf == NULL)
                                    {
                                        perror("fopen fail!!!");
                                        return;
                                    }
                                    char ch[1000]="xxxxxxx";
                                    fgets(ch, 7, pf);
                                    printf("%s", ch);
                                    fclose(pf);
                                    pf = NULL;
                                    return 0;
                                }
                                

                                【C语言】探索文件读写函数的全貌 第9张

                                【函数部分说明】:

                                功能上:

                                  5.6 fscanf和fprintf函数

                                • 换行符(\n)会使fgets停止,但函数将其视为有效字符,并包含在复制到str的字符串中,在将字符复制到str之后,会自动添加\0,导致只能读取num-1字符

                                  参数部分上:

                                  str:

                                  • 指向复制字符串读取到char数组的指针(这里提前开辟好数组)

                                    num:

                                    • 复制到str中的最大字符数(包括‘\0’字符-字符串)

                                      返回值:

                                      • 成功,返回str指针,失败,返回EOF
                                        struct S
                                        {
                                            char a[1000];
                                            int p;
                                            float pa;
                                        };
                                        

                                        【C语言】探索文件读写函数的全貌 第10张

                                        【说明】:给\0留了一个位置


                                        5.7 fprintf()

                                        fprint和fscanf属于格式化输入输出函数,将不同数据类型放在结构体中进行统一管理。

                                      • 按格式化数据写入流,如果format包含格式说明符(%开头的子序列),则格式化format后面的其他参数并将其插入到生成的字符串中,代替其各自的说明符.
                                      • int main()
                                        {
                                            struct S s={"zhangsan",100,4.3};
                                            FILE* pf = fopen("test1.txt", "w");
                                        	if (pf == NULL)
                                        	{
                                        		perror("fopen fail!!!");
                                        		return;
                                        	}
                                        	fprintf(pf,"%s %d %f", s.a, s.p, s.pa);
                                        		fclose(pf);
                                        		pf = NULL;
                                        	return 0;
                                        }
                                        

                                        【C语言】探索文件读写函数的全貌 第11张

                                        【函数部分说明】:

                                        功能上:

                                          5.8 fscanf()

                                        • 根据格式说明符顺序,匹配不同类型对应的数据,输入到text1.txt中去。

                                          返回值:

                                          • 成功,返回写入字符总数,失败,则返回负数
                                          • 从流中读取数据,并根据格式将其存储到其他参数指向的位置。
                                          • 该对象由格式化字符串的相应格式说明符指示。
                                          • 【C语言】探索文件读写函数的全貌 第12张

                                            【函数部分说明】:

                                            功能:

                                              int main()
                                              {
                                              	struct S s;//这里没有初始化,目的是通过fscanf赋值
                                              	FILE* pf = fopen("test1.txt", "r");
                                              	if (pf == NULL)
                                              	{
                                              		perror("fopen fail!!!");
                                              		return;
                                              	}	
                                              	fscanf(pf, "%s %d %f", s.a, &(s.p), &(s.pa));
                                              	printf("%s %d %f", s.a, s.p, s.pa);
                                                  
                                              		fclose(pf);
                                              		pf = NULL;
                                              	return 0;
                                              }
                                              

                                              5.9 sprintf和sscanf函数

                                            • 根据格式说明符顺序,匹配text1.txt对应的数据,输入到对应的数据变量中

                                              返回值:

                                              成功后,该函数返回已成功填充的参数列表的项数,失败,EOF

                                              5.9.1 sprintf()


                                              5.9.2 sscanf

                                              int main()
                                              {
                                              	//将格式化的数据转换为字符串存放在p数组中
                                              	struct S s = { "zhangsan",100,4.3 };
                                              	char p[1000] = { 0 };
                                              	sprintf(p, "%s %d %f", s.a, s.p, s.pa);
                                              	printf("%s\n", p);
                                              	//从p这个字符串中提取格式化的数据(用p数组中的数据,为结构体t成员赋值)
                                              	struct S t;
                                              	sscanf(p, "%s %d %f", t.a, &(t.p), &(t.pa));
                                              	printf("%s %d %lf", s.a, s.p, s.pa);
                                              	return 0;
                                              }
                                              

                                              【C语言】探索文件读写函数的全貌 第13张

                                              【函数部分说明】:

                                              功能:

                                              从字符串中读取格式化数据(将字符数组中的字符串按照格式说明符转换为对应的格式化数据)

                                              小总结

                                              【C语言】探索文件读写函数的全貌 第14张

                                              【函数部分说明】:

                                              功能:

                                              将格式化数据写入字符串(格式化数据转换为字符串存放在字符数组中)

                                              基于以上两个函数使用场景:

                                              六、二进制的方式读写函数

                                              6.1 fwrite()

                                              【C语言】探索文件读写函数的全貌 第15张


                                              count size

                                              在这里插入图片描述

                                              【函数部分说明】:

                                              【C语言】探索文件读写函数的全貌 第16张

                                              功能:

                                              • 二进制输出,将 ptr 元素数组(每个元素的大小为 bytes)从
                                              • 成功将返回写入元素个数
                                              • 指向的内存块写入count中的当前位置

                                                返回值:

                                                  size
                                                • 如果此数字与 count 参数不同,则写入错误会阻止函数完成
                                                • 如果
                                                  int main()
                                                  {
                                                  	FILE* pf = fopen("test1.txt", "wb");//打开一个二级制文件
                                                  	if (pf == NULL)
                                                  	{
                                                  		perror("fopen fail!!!");
                                                  		return;
                                                  	}
                                                  	int nums[] = { 1,2,3,4,5,6,7 };
                                                  	fwrite(nums, sizeof(int), 7, pf);
                                                      fclose(pf);
                                                  	pf = NULL;
                                                  	return 0;
                                                  }
                                                  

                                                  6.2 fread()

                                                  为零,则函数返回零,错误指示器保持不变。
                                                • 功能:
                                                • 【注意】:这里是通过二进制的形式写入文本文件中,如果想要看懂输入的数据,可以在打开方式选择二进制编辑器或者使用fread函数读取出来


                                                  count

                                                  【C语言】探索文件读写函数的全貌 第17张

                                                  【函数部分说明】:

                                                    的大小为 bytes
                                                  • 二进制输入,从流中读取 ptr 元素的数组,每个元素
                                                  • 成功将返回写入实际元素个数
                                                  • ,并将它们存储在 count 指定的内存块中。

                                                    返回值:

                                                      文件末尾
                                                    • 如果此数字与 size 参数不同,则表示读取时发生读取错误或达到count
                                                    • 如果 ptr

                                                      七、文件的随机读写

                                                      为零,则该函数返回零,

                                                      7.1 fseek()

                                                      指向的流状态和内容保持不变

                                                      比如:如果实际文件中只有7个字符,count是14,那么读到7给字符就结束(返回值

                                                      int main()
                                                      {
                                                          FILE* pf = fopen("test1.txt", "rb");//打开一个二级制文件
                                                          if (pf == NULL)
                                                          {
                                                              perror("fopen fail!!!");
                                                              return;
                                                          }
                                                          //int nums[] = { 1,2,3,4,5,6,7 };
                                                          //fwrite(nums, sizeof(int), 7, pf);
                                                          //读取二进制存放的信息
                                                          
                                                          int nums[10] = { 0 };
                                                          fread(nums, sizeof(int), 10, pf);
                                                          for (int i = 0; i  
                                                      

                                                      【C语言】探索文件读写函数的全貌 第18张


                                                    • 二进制文件:要从原点偏移的字节数
                                                    • 由于文本文件和二进制文件使用方面存在差异,下面三个函数将采用二进制文件

                                                    • SEEK_SET :文件开头
                                                    • 【C语言】探索文件读写函数的全貌 第19张

                                                      【函数部分说明】:

                                                      功能上:

                                                      • 重新定位流位置指示器,根据文件指针的位置和偏移量来定位文件指针

                                                        返回值:

                                                        • 成功,返回零,失败,返回非零值

                                                          【注意】:

                                                          • SEEK_CUR :文件指针的当前位置
                                                          • 文本文件:零或 ftell 返回的值

                                                            【原点】

                                                            特别注意的是起源(从哪个位置),用作偏移参考位置

                                                              int main()
                                                              {
                                                              	FILE* pf = fopen("test1.txt", "wb");//打开一个二级制文件
                                                              	if (pf == NULL)
                                                              	{
                                                              		perror("fopen fail!!!");
                                                              		return;
                                                              	}
                                                              	fputs("This is an apple", pf);
                                                              	fseek(pf, 3, SEEK_SET);
                                                              	fputs("sam", pf);
                                                                  
                                                              	fseek(pf, -3, SEEK_END);//文件指针往前走
                                                              	fputs("xxx", pf);
                                                                  fclose
                                                              	return 0;
                                                              }
                                                              

                                                              7.2 ftell()

                                                            • SEEK_END: 文件末尾
                                                            • 对于二进制流,这是从文件开头开始的字节
                                                            • 【C语言】探索文件读写函数的全貌 第20张

                                                              int main()
                                                              {
                                                                  FILE* pf = fopen("test1.txt", "wb");//打开一个二级制文件
                                                                  if (pf == NULL)
                                                                  {
                                                                      perror("fopen fail!!!");
                                                                      return;
                                                                  }
                                                                  fputs("This is an apple", pf);
                                                                  fseek(pf, 0, SEEK_END);
                                                                  int size = ftell(pf);
                                                                  printf("%d", size);//size==16,源头到参考位置的字节数
                                                                  fclose(pf);
                                                                  pf = NULL;
                                                                  return 0;
                                                              }
                                                              

                                                              【C语言】探索文件读写函数的全貌 第21张

                                                              【函数部分说明】:

                                                              功能上:

                                                              • 返回流的位置指示器的当前值(返回文件指针相对于起始位置的偏移量 )

                                                                返回值:

                                                                  7.3 rewind()

                                                                • 对于文本流,数值可能没有意义
                                                                  int main()
                                                                  {
                                                                      FILE* pf = fopen("test1.txt", "wb");//打开一个二级制文件
                                                                      if (pf == NULL)
                                                                      {
                                                                          perror("fopen fail!!!");
                                                                          return;
                                                                      }
                                                                      fputs("This is an apple", pf);
                                                                      fseek(pf, 0, SEEK_END);
                                                                      rewind(pf);
                                                                      int size = ftell(pf);
                                                                      printf("%d", size);
                                                                      fclose(pf);
                                                                      pf = NULL;
                                                                      return 0;
                                                                  }
                                                                  

                                                                  八、文件读取结束的判断

                                                                  【C语言】探索文件读写函数的全貌 第22张

                                                                  【函数部分说明】:

                                                                  • 功能:让文件指针的位置回到文件的起始位置

                                                                    8.1 ferror()

                                                                    【C语言】探索文件读写函数的全貌 第23张


                                                                  • 功能:检查错误指示器
                                                                  • 【牢记】:在文件读取过程中,不能用feof函数的返回值直接判断文件是否结束

                                                                    【C语言】探索文件读写函数的全貌 第24张

                                                                    【函数部分说明】:

                                                                      错误指示器
                                                                    • 返回值:检查是否设置了与

                                                                      8.2 feof()

                                                                      关联的结束指示,如果设置了,则返回一个不同于零的值

                                                                      小总结

                                                                      【C语言】探索文件读写函数的全貌 第25张

                                                                      【函数部分说明】:

                                                                      • 功能:检查文件结束指示器

                                                                      • 返回值:**如果设置了与流关联的文件

                                                                        检查文件读取结束场景

                                                                        符,则返回非零值。**否则,返回零。

                                                                        while ((c = fgetc(fp)) != EOF) // 标准C I/O读取
                                                                        {
                                                                        	putchar(c);
                                                                        }
                                                                        //判断是什么原因结束的
                                                                        	if (ferror(fp))
                                                                        puts("I/O error when reading");
                                                                        	else if (feof(fp))
                                                                        puts("End of file reached successfully");
                                                                        

                                                                        文本文件读取是否结束:判断返回值是否为EOF(fgetc)或者NULL(fgets)

                                                                        二进制文件读取是否结束:判断返回值是否小于实际要读的个数。


                                                                        九、文件缓冲区

                                                                        int main()
                                                                        {
                                                                        FILE*pf = fopen("test.txt", "w");
                                                                        fputs("abcdef", pf);//先将代码放在输出缓冲区
                                                                        printf("睡眠10秒-已经写数据了,打开test.txt⽂件,发现⽂件没有内容\n");
                                                                        Sleep(10000);
                                                                        printf("刷新缓冲区\n");
                                                                        fflush(pf);//刷新缓冲区时,才将输出缓冲区的数据写到⽂件(磁盘)
                                                                        //注:fflush 在⾼版本的VS上不能使⽤了
                                                                        printf("再睡眠10秒-此时,再次打开test.txt⽂件,⽂件有内容了\n");
                                                                        Sleep(10000);
                                                                        fclose(pf);
                                                                        //注:fclose在关闭⽂件的时候,也会刷新缓冲区
                                                                        pf = NULL;
                                                                        return 0;
                                                                        }
                                                                        

                                                                        ANSIC标准采⽤“缓冲文件系统”处理的数据⽂件的,所谓缓冲⽂件系统是指系统⾃动地在内存中为程序中每⼀个正在使⽤的⽂件开辟⼀块“⽂件缓冲区”。从内存向磁盘输出数据会先送到内存中的缓冲区,装满缓冲区后才⼀起送到磁盘上。如果从磁盘向计算机读⼊数据,则从磁盘⽂件中读取数据输⼊到内存缓冲区(充满缓冲区),然后再从缓冲区逐个地将数据送到程序数据区(程序变量等)。缓冲区的⼤⼩根据C编译系统决定的.上述过程转换为下图展示。

                                                                        【验证】:

                                                                        【目的】:

                                                                        程序延迟执行时间内,检查文本编辑器是否存在数据,等待程序睡眠时间过去,再次检查文本编辑器是否存在数据,验证内存和外存之间存在缓冲区

                                                                        【C语言】探索文件读写函数的全貌 第26张

                                                                        【C语言】探索文件读写函数的全貌 第27张

                                                                        【结论】:

                                                                        因为有缓冲区的存在,C语⾔在操作文件的时候,需要做刷新缓冲区或者在⽂件操作结束的时候关闭文件。如果不做,可能导致读写⽂件的问题


                                                                        【C语言】探索文件读写函数的全貌 第28张

                                                                        以上就是本篇文章的所有内容,在此感谢大家的观看!这里是店小二C语言笔记,希望对你在学习C语言中有所帮助!


    免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

    目录[+]