Rust 学习笔记(一)
本文是博主学Rust的学习笔记,将学习经历整理下来,学习接收的内容更加条理且以便回顾。
参照学习资料为Rust官方文档,如内容中有误还请指点(一般没有☺)
一. 项目搭建
1.创建项目
cargo new hello_cargo
cd hello_cargo
2.构建项目
cargo build
3.运行项目
./target/debug/hello_cargo
文件运行成功
也可以使用cargo run
cargo run
Cargo 还提供了一个名为 cargo check 的命令。 该命令可快速检查你的代码,确保它能编译但不会生成可执行文件
cargo check
二. 变量
1. 默认变量不可变
fn main() {let x = 5;println!("The value of x is: {x}");x = 6;println!("The value of x is: {x}");
}
报错
2. 实现变量可变,添加mut
fn main() {let mut x = 5;println!("The value of x is: {x}");x = 6;println!("The value of x is: {x}");
}
3. 常量
使用大写英文字母,单词和单词之间使用下划线
const THREE_HOURS_IN_SECONDS: u32 = 60 * 60 * 3;
4. 阴影
fn main() {let x = 5;let x = x + 1;{let x = x * 2;println!("The value of x in the inner scope is: {x}");}println!("The value of x is: {x}");
}
这个程序首先将 x 绑定为 5。 然后通过重复 let x = 创建一个新变量 x,将原来的值加上 1,这样 x 的值就是 6。 然后,在用大括号创建的内部作用域中,第三条 let 语句也对 x 进行了阴影处理,并创建了一个新变量,将原来的值乘以 2,使 x 的值为 12。 当该作用域结束时,内部阴影结束,x 返回到 6
三. 数据类型
1. 标量
(1)整型
Length | Signed | Unsigned |
---|---|---|
8-bit | i8 | u8 |
16-bit | i16 | u16 |
32-bit | i32 | u32 |
64-bit | i64 | u64 |
128-bit | i128 | u128 |
arch | isize | usize |
isize 和 usize 类型取决于程序运行的计算机体系结构,表中用 "arch "表示: 如果是 64 位架构,则为 64 位;如果是 32 位架构,则为 32 位。
(2)数字字面量
类型 | 前缀 | 示例 | 十进制值 | 适用场景 |
---|---|---|---|---|
十进制 | 无 | 98_222 | 98222 | 常规数值 |
十六进制 | 0x | 0xff | 255 | 位操作、内存地址 |
八进制 | 0o | 0o77 | 63 | 文件权限掩码 |
二进制 | 0b | 0b1111_0000 | 240 | 位标志、硬件寄存器 |
字节 | b' | b'A' | 65 | u8 类型ASCII字符 |
(3)浮点类型
Rust 还为浮点数(带有小数点的数)提供了两种原始类型。 Rust 的浮点类型是 f32 和 f64,大小分别为 32 位和 64 位。 默认类型是 f64,因为在现代 CPU 上,它的速度与 f32 大致相同,但精度更高。 所有浮点类型都是带符号的。
fn main() {let _x = 2.0; // f64let _y: f32 = 3.0; // f32
}
(4)数字运算
示例代码
fn main() {// additionlet _sum = 5 + 10;// subtractionlet _difference = 95.5 - 4.3;// multiplicationlet _product = 4 * 30;// divisionlet _quotient = 56.7 / 32.2;let _truncated = -5 / 3; // Results in -1// remainderlet _remainder = 43 % 5;
}
(5)布尔类型
与大多数其他编程语言一样,Rust 中的布尔类型有两个可能的值:true 和 false。 布尔值的大小为一个字节。 Rust 中的布尔类型用 bool
代码示例
fn main() {let t = true;let f: bool = false; // with explicit type annotation
}
(6)字符类型
Rust 的 char 类型是该语言最原始的字母类型。
代码示例
#[allow(non_snake_case)] // 禁用蛇形命名检查
fn main() {let _c = 'z';let _z: char = 'ℤ';let Heart_Eyed_Cat = '😻'; // 保持原名(不推荐)println!("{}", _c);println!("{}", _z);println!("{}", Heart_Eyed_Cat);
}
运行结果
2. 复合类型
(1)元组类型
元组是将多种类型的数值组合成一个复合类型的通用方法。 元组有固定的长度:一旦声明,其大小就不能增大或缩小。 我们在括号内写入一个逗号分隔的值列表,就创建了一个元组。 元组中的每个位置都有一个类型,元组中不同值的类型不一定相同。
例如
fn main() {let tup: (i32, f64, u8) = (500, 6.4, 1);
}
变量 tup 与整个元组绑定,因为元组被视为一个单一的复合元素。 要从元组中获取单个值,我们可以使用模式匹配来重组元组值
fn main() {let tup = (500, 6.4, 1);let (x, y, z) = tup;println!("The value of y is: {y}");
}
我们也可以直接访问一个元组元素,方法是使用句号(.),后面跟上我们要访问的值的索引
fn main() {let x: (i32, f64, u8) = (500, 6.4, 1);let five_hundred = x.0;let six_point_four = x.1;let one = x.2;
}
没有任何值的元组有一个特殊的名称,即 unit。 这个值及其对应的类型都被写成(),代表空值或空返回类型。 如果表达式不返回任何其他值,则隐式返回单位值。
(2)数组类型
数组的每个元素都必须具有相同的类型。 与其他一些语言中的数组不同,Rust 中的数组有固定的长度。我们将数组中的值以逗号分隔的列表形式写在方括号内。
fn main() {let a = [1, 2, 3, 4, 5];
}
在写数组类型时,可以用方括号写出每个元素的类型、分号,然后写出数组中元素的个数
let a: [i32; 5] = [1, 2, 3, 4, 5];
也可以通过指定初始值、分号和方括号中的数组长度来初始化数组,使每个元素都包含相同的值
let a = [3; 5];
a. 访问数组元素
数组是一块已知固定大小的内存,可以在堆栈上分配。 你可以使用索引访问数组中的元素
fn main() {let a = [1, 2, 3, 4, 5];let first = a[0];let second = a[1];
}
b. 无效数组元素访问
尝试访问数组中超过数组末尾的元素会发生什么。 假设运行这段代码
use std::io;fn main() {let a = [1, 2, 3, 4, 5];println!("Please enter an array index.");let mut index = String::new();io::stdin().read_line(&mut index).expect("Failed to read line");let index: usize = index.trim().parse().expect("Index entered was not a number");let element = a[index];println!("The value of the element at index {index} is: {element}");
}
该代码编译成功。 如果使用 cargo run 运行这段代码并输入 0、1、2、3 或 4,程序将打印出数组中该索引处的相应值。 如果你输入一个超过数组末尾的数字,例如 10
报错
程序在索引操作中使用无效值时出现运行时错误。 程序带着错误信息退出,并且没有执行最后的 println! 当你尝试使用索引访问元素时,Rust 会检查你指定的索引是否小于数组长度。 如果索引大于或等于长度,Rust 就会惊慌失措。 这种检查必须在运行时进行,尤其是在这种情况下,因为编译器不可能知道用户稍后运行代码时会输入什么值。
这是 Rust 内存安全原则发挥作用的一个例子。 在许多底层语言中,这种检查是不存在的,当你提供了一个不正确的索引时,无效的内存就会被访问。
相关文章:
Rust 学习笔记(一)
本文是博主学Rust的学习笔记,将学习经历整理下来,学习接收的内容更加条理且以便回顾。 参照学习资料为Rust官方文档,如内容中有误还请指点(一般没有☺) 一. 项目搭建 1.创建项目 cargo new hello_cargo cd hello_c…...
C++vector常用接口和模拟实现
C中的vector是一个可变容量的数组容器,它可以像数组一样使用[]进行数据的访问,但是又不像C语言数组空间是静态的,它的空间是动态可变的。 在日常中我们只需要了解常用的接口即可,不常用的接口查文档即可。 1.构造函数 //空构造…...
AI数据分析:一键生成数据分析报告
作为一名数据分析师,我们经常需要做一些数据分析报告,今天我就来手把手教你如何使用大模型一键生成高质量的数据分析报告,提高你的工作效率。 假设你是一家新零售企业的销售分析师,有一份销售数据,数据结构如数据结构…...
leetcode 2829. k-avoiding 数组的最小总和 中等
给你两个整数 n 和 k 。 对于一个由 不同 正整数组成的数组,如果其中不存在任何求和等于 k 的不同元素对,则称其为 k-avoiding 数组。 返回长度为 n 的 k-avoiding 数组的可能的最小总和。 示例 1: 输入:n 5, k 4 输出&…...
微信小程序登录和获取手机号
目录 准备工作 实现流程 实现代码 公共部分 通过code获取openid等信息 解密手机号 扩展 不借助工具类实现解密 借助工具类获取access_token 准备工作 需要小程序账号(可以去微信公众平台创建一个测试号或者正式号) appid:小程序id …...
漫画|基于SprinBoot+vue的漫画网站(源码+数据库+文档)
漫画网站 目录 基于SprinBootvue的漫画网站 一、前言 二、系统设计 三、系统功能设计 1系统功能模块 2管理员功能模块 3用户功能模块 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取: 博主介绍:✌️大…...
华鲲振宇天工TG225 B1国产服务器试装openEuler22.03 -SP4系统
今天测试了一下在华鲲振宇公司的天工TG225 B1国产服务器上进行openEuler22.03 -SP4操作系统的试装,本文记录整个测试过程。 一、服务器信息 1、服务器型号 Huakun TG225 B1 (D) 2、登录IPMI帐户信息 初始用户名Tech.ON 密码TianGong8000 二、磁盘RAID配置 测试…...
Graphpad Prism for Mac医学绘图
Graphpad Prism for Mac医学绘图 文章目录 Graphpad Prism for Mac医学绘图一、介绍二、效果三、下载 一、介绍 GraphPad Prism for Mac是一款功能强大、易于使用的科学和统计分析软件,适用于各种类型的数据处理和可视化需求。无论您是进行基础研究、临床试验还是学…...
单多表查询练习
课堂代码练习 mysql> select * from t_heros; ----------------------------- | id | name | books | ----------------------------- | 1 | 孙悟空 | 西游记 | | 2 | 猪八戒 | 西游记 | | 3 | 林黛玉 | 红楼梦 | | 4 | 贾宝玉…...
SICAR标准 汽车焊装生产线触摸屏操作说明
目录 SIMATIC HMI 是西门子工业自动化解决方案的核心组件,支持实时设备监控与交互,文档中展示了其在焊装生产线中以SICAR标准为基础的具体应用,包括车型切换(如 AY2/A26)、KMC 夹具配置及能源效率分析,适用…...
Photoshop 2025安装教程包含下载安装包,2025最新版图文安装教程
文章目录 前言一、Photoshop 2025下载二、Photoshop 2025安装教程1. 安装包解压2. 找到安装程序3. 以管理员身份运行4. 安装选项设置5. 选择安装路径6. 开始安装7. 安装完成8. 启动软件9. 软件主界面 前言 无论你是专业设计师,还是刚接触图像处理的新手,…...
SylixOS 中 select 原理及使用分析
1、select接口简介 1.1 select接口使用用例 select 是操作系统多路 I/O 复用技术实现的方式之一。 select 函数允许程序监视多个文件描述符,等待所监视的一个或者多个文件描述符变为“准备好”的状态。所谓的”准备好“状态是指:文件描述符不再是阻塞状…...
F1C200S编译
一、查看荔枝派Nano的分区内容 分成了两个分区 将第一个分区通过mount进行挂载,查看到内容包括:主要是dtb设备树和zImage压缩的内核。由于u-boot不是是通过dd指令传输到指定的位置,因此这里不显示。还有一个scr,这是一个uboot启动…...
边缘计算 vs. 云计算,谁才是工业物联网的未来?
前言 在物联网(IoT)飞速发展的今天,边缘计算正在彻底改变数据的处理、存储和分析方式。传统的IoT设备数据通常需要发送到云端进行处理,但随着设备数量的激增,这种模式在延迟、带宽和安全性方面暴露出诸多局限。边缘计…...
vue 使用v-model实现父子组件传值——子父组件同步更新
基于vue2和vue3两个版本的框架略显不同,所以我分开的来讲: 1、vue2 子组件(my-input.vue): <template><input type"text" :value"name" input"inputChange" /> </tem…...
监控易运维在北京某医药集团数字新基建项目中的应用
随着信息技术的快速发展,企业数字化转型已成为当今时代的趋势。北京某医药公司作为一家知名的中医药企业,也在积极推进数字化建设。在数字新基建招标项目中,监控易管理平台 6.0 凭借其强大的功能和特点,成功中标,为医药…...
小智AI音频开发 libopus + Eclipse C/C++ MinGW 编解码测试用例
小智AI音频开发 libopus Eclipse C/C MinGW 编解码测试用例 目录 小智AI音频开发 libopus Eclipse C/C MinGW 编解码测试用例前言移植编解码测试libopus编码器的控制参数信号类型比特率带宽编码复杂度前向纠错声道不连续传输位深帧持续时长码率VBR约束应用类型 示例代码 前言…...
Spring Boot定时任务设置与实现
Spring Boot定时任务设置与实现 在Spring Boot中,可以使用Scheduled注解来创建定时任务。以下是一个简单的示例,展示了如何在项目启动后每5秒调用一次指定的方法。 1. 添加依赖 首先,确保你的pom.xml文件中包含Spring Boot的依赖ÿ…...
海康/大华/宇视/华为/汉邦/天地伟业/英飞拓/科达/中星微/同为/天视通等主流监控设备RTSP地址
RTSP协议是TCP/IP协议体系中的一个应用层协议,该协议主要规定了一对多应用程序如何有效地通过IP网络传送多媒体数据,特别适用于音视频数据的实时传输和控制。 目前监控市场厂家众多,各个厂家的RTSP地址格式不尽一致 以下是海康威视、大华股份…...
FreeRTOS 队列结构体 xQUEUE 深度解析
一、核心成员与功能设计 FreeRTOS 的队列结构体 xQUEUE 是任务间通信(IPC)的核心数据结构,通过统一的设计支持队列、信号量、互斥量等多种同步机制。其设计体现了 **"数据拷贝 结构复用"** 的理念,兼顾轻量化与扩展…...
system V 消息队列信息量(了解)
目录 system V 消息队列 消息队列的基本原理 消息队列数据结构 消息队列接口介绍 消息队列相关函数 消息队列的释放 向消息队列发送数据 向消息队列接收消息 System V 信号量 信号量相关概念 信号量的数据结构 信号量相关函数 进程互斥 system V IPC联系 system V…...
CSS rem、vw/vh、less
目录 分辨率、视口与二倍图 一、分辨率与像素基础 1. 物理像素(Physical Pixels) 2. 逻辑像素(CSS 像素) 二、视口(Viewport)控制 1. 视口类型 2. 设置理想视口 三、二倍图(Retina/HiD…...
CHI协议——retry
一、核心目标 防止请求阻塞:当Completer暂时无法处理请求(比如tracker不够被占满)时,通过retry机制避免请求在 REQ Channel堆积,确保系统流畅运行。 retry机制只存在于REQ Channel,在DAT/RSP/SNP Channel不存在 二、Retry Flow…...
在linux部署网站
在Linux部署网站,需要准备一个纯净的系统 一、系统环境准备 1.设置静态IP地址 2.关闭默认防火墙 systemctl disable firewalld --now 3.配置SSH密钥登录 4.yum update -y && reboot # 更新系统内核 5.yum install -y wget curl unzip # 安装…...
语义网是什么
语义网(Semantic Web)是由万维网发明者 蒂姆伯纳斯-李(Tim Berners-Lee) 在20世纪90年代末提出的概念,目标是让互联网上的数据不仅对人类可读,还能被机器自动理解、关联和推理。它通过为数据添加明确的语义…...
51单片机
本文来源:腾讯元宝 51单片机是对所有兼容Intel 8031指令系统的8位单片机的统称,其技术起源于1981年Intel推出的8051内核微控制器(Micro Control Unit)。作为嵌入式系统领域的经典代表,它具有以下核心特点和应用价值: 一、技术特…...
初2数学-1.勾股定理
复习勾股定理: 1. ; 2. ; 3. ; 4. 后面3个式子都是根据相似三角形对应边成比例推出来的。 第4个式子来做例子: 三角形CBD与三角形 ACD相似,所以: h:c2 c1 : h. 【例题] ABCD为菱形,边长为…...
Java条码与二维码生成技术详解
一、技术选型分析 1.1 条码生成方案 Barbecue是最成熟的Java条码库,支持: Code 128EAN-13/UPC-AUSPS Inteligent Mail等12种工业标准格式 1.2 二维码方案对比 库名称维护状态复杂度功能扩展性ZXing★★★★☆较高强QRGen★★★☆☆简单一般BoofCV★…...
Spring Boot 集成 Quartz 实现定时任务(Cron 表达式示例)
Spring Boot 集成 Quartz 实现定时任务(Cron 表达式示例) 前言1. 添加 Quartz 依赖2. 创建 Quartz 任务3. 配置 Quartz 任务调度4. 启动 Spring Boot 观察定时任务执行5. Quartz Cron 表达式详解6. 结论 前言 在 Spring Boot 项目中,我们经常…...
数智读书笔记系列025《智能医疗:医学人工智能的未来》
一、书籍概述与核心价值 1.1 书籍定位与影响力 《智能医疗:医学人工智能的未来》在智能医疗领域占据着独特且重要的位置,作为首部由德勤管理咨询引进的 AI 医疗译著,它宛如一座桥梁,连接了人工智能与生物医学这两个看似独立却又紧密关联的领域。在当下智能医疗蓬勃发展但…...
SQL Server 2022常见问题解答
以下是SQL Server 2022的常见问题解答,按主题分类整理: 一、安装与升级 SQL Server 2022的系统要求是什么? 支持的操作系统:Windows Server 2016及以上、Linux(Ubuntu 20.04/22.04, RHEL 8/9等)。内存:至少4GB(建议8GB+)。磁盘空间:6GB以上,具体取决于安装组件。如何…...
SQLAlchemy关键词搜索技术深度解析:从基础过滤到全文检索
在数据驱动的应用开发中,基于关键词的模糊查询是常见的业务需求。SQLAlchemy作为Python生态中最流行的ORM框架,提供了多种实现关键词搜索的技术方案。本文将从性能、适用场景和技术复杂度三个维度,系统对比分析SQLAlchemy中关键词搜索的最佳实…...
react 15-16-17-18各版本的核心区别、底层原理及演进逻辑的深度解析
一、React 15(2016) 核心架构:Stack Reconciler(栈协调器) 工作原理: 同步递归渲染:采用深度优先遍历方式递归处理 Virtual DOM,形成不可中断的调用栈渲染流程:1. 触发 …...
[Windows] Edge浏览器_134.0.3124.83绿色便携增强版-集成官方Deepseek侧边栏
微软Edge浏览器 绿色便携增强版 长期更新 链接:https://pan.xunlei.com/s/VOMA-aVC_GPJiv-MzRS89lsVA1?pwdemxj# Edge浏览器_134.0.3124.83绿色便携增强版-集成官方Deepseek侧边栏...
STM32学习笔记之存储器映射(原理篇)
📢:如果你也对机器人、人工智能感兴趣,看来我们志同道合✨ 📢:不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】 📢:文章若有幸对你有帮助,可点赞 👍…...
探索PyMOL新插件NRGSuite-Qt:全面提升分子对接、结合位点预测与动力学模拟的研究效率
随着分子建模和计算生物学的快速发展,分子对接(Molecular Docking)、结合位点预测、相互作用分析以及动力学研究等领域的工具越来越重要。这些工具不仅帮助研究人员理解分子间的相互作用机制,还能加速药物设计和优化过程。NRGSuit…...
c#在work线程中怎样更新UI控件
最近笔者调试修改项目,碰到了c#在work线程中怎样更新UI控件中的场景,简单总结了下,主要有两个方法: 方法1:通过System.Windows.Application.Current.Dispatcher.Invoke来更新UI控件 System.Windows.Application.Curre…...
DeepSeek、Grok 与 ChatGPT 4.5:新一代大模型架构与推理能力深度解析
近年来,大语言模型(LLM)领域发展迅猛,DeepSeek、Grok 以及 OpenAI 最新发布的 ChatGPT 4.5 都是该领域的代表性产品。本文将从架构设计、推理能力、训练策略等方面,对三者进行技术对比,探讨其优势与潜在的应…...
从零基础到 Java 网站项目开发学习规划
在数字化时代,Java 凭借其卓越的跨平台性、强大的功能和丰富的类库,成为开发各类网站的主流编程语言。对于想要踏入 Java 网站开发领域的初学者而言,一份系统、科学的学习规划至关重要。它不仅能帮助我们有条不紊地掌握知识和技能,…...
Unity Shader 学习17:合批渲染
一、基础概念 合批主要是针对这三个概念进行优化减少: ① SetPass Call:一次渲染状态切换,也就是每次切换 材质/Pass 时,就会触发一次SetPass Call ② Draw Call:cpu 调用一次 gpu 绘制函数 ③ Batch:表示…...
【JavaSE】抽象类和接口
【JavaSE】抽象类和接口 前言:补充知识 —— 利用类和对象,交换两个数字 一、抽象类1.1 抽象类是什么?1.2 抽象类特点1.3 抽象类举例1.4 抽象类作用 二、接口2.1 接口是什么?2.2 接口的特性2.3 接口的使用规则2.4 类可以实现多个接…...
嵌入式单片机程序的映像文件解读
映像文件类型 单片机下载程序的映像文件是包含了可执行代码、数据等信息,用于将程序烧录到单片机中的文件。常见的映像文件种类如下: 十六进制文件(Hex 文件) 格式特点:Hex 文件是一种文本格式的文件,以 ASCII 字符形式存储数据。它由一系列的记录组成,每条记录包含一个…...
在 Linux(Ubuntu / CentOS 7)上快速搭建我的世界 MineCraft 服务器,并实现远程联机,详细教程
Linux 部署 MineCraft 服务器 详细教程(丐版,无需云服务器) 一、虚拟机 Ubuntu 部署二、下载 Minecraft 服务端三、安装 JRE 21四、安装 MCS manager 面板五、搭建服务器六、本地测试连接七、下载樱花,实现内网穿透,邀…...
STL之string
1.为什么学习string类 1.1 C语言中的字符串 C语言中,字符串是以’\0’结尾的一些字符的集合,为了操作方便,C标准库中提供了一些str系列的库函数, 但是这些库函数与字符串是分离开的,不太符合OOP的思想,而且…...
cJSON-轻量级 C 语言 JSON 解析库的使用(一)
文章目录 cJSON:轻量级 C 语言 JSON 解析库的使用前言一、cJSON 简介核心特点: 二、核心数据结构解析三、深入解析 API 设计1. 解析 JSON2. 访问数据3. 构建 JSON 四、内存管理策略五、高级应用技巧1. 引用系统2. 批量操作3. 原地修改 六、性能优化技巧1…...
用Python和Stable Diffusion生成AI动画:从图像到视频的全流程指南
引言 本文将演示如何通过Python代码实现基于文本提示的AI动画生成。我们将使用Stable Diffusion生成连贯图像帧,结合OpenCV合成视频,最终实现一个可自定义的动画生成 pipeline。 一、环境准备 1. 依赖安装 # 安装核心库 pip install diffusers transformers torch numpy …...
C++ 继承:面向对象编程的核心概念(二)
文章目录 5. 继承与友元6. 继承与静态成员7. 多继承及其菱形继承问题7.1 不同的继承方式7.2 虚继承 8. 继承和组合9. 总结 书接上回:C 继承:面向对象编程的核心概念(一) 5. 继承与友元 友元关系不能继承,也就是说基类友元不能访问…...
Chaos Mesh 混沌工程平台介绍、安装及使用指南
Chaos Mesh 混沌工程平台介绍、安装及使用指南 一、Chaos Mesh 简介 Chaos Mesh 是 PingCAP 开源的云原生混沌工程平台,支持在 Kubernetes 环境中模拟各种故障场景,帮助提升系统的容错性和可恢复性。 核心特性 丰富的故障类型: 资源类&…...
每天五分钟深度学习框架PyTorch:梯度裁剪解决RNN梯度爆炸的问题
本文重点 在循环神经网络训练的过程中,有时候很容易出现梯度爆炸的情况,如果出现这种问题,我们应该怎么办?本文先来分析一下为什么会出现这种情况,然后我们在给出解决方案 梯度爆炸的原因 我们从RNN训练的反向传播算法入手,当我们使用BPTT算法训练RNN的时候,它的公式…...
批量删除 PDF 中的所有图片、所有二维码图片以及指定的某张图片
PDF 文档中我们可以插入图片、文字等多种类型的资源。在某些场景下,可能我们需要删除 PDF 文档中的图片,有可能是需要删除所有的图片,也有可能是删除固定的某些图片。那碰到这种情况,我们应该怎么处理呢?今天就给大家介…...