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

【C语言】文本操作函数fgetc、fputc、fgets、fputs、fprintf、fscanf、fread、fwrite

一、介绍

二、简要概括

三、函数的使用 

1、fgetc和fputc

int fgetc ( FILE * stream ); 

从文件中读取信息,每次读取一个字符

  • 从流中获取字符
  • 返回指定流的内部文件位置指示符当前指向的字符。然后将内部文件位置指示符推进到下一个字符
int main()
{//打开文件FILE * pf = fopen("data.txt", "r");if (pf == NULL){perror("fopen");return 1;}//读文件int ch = fgetc(pf);printf("%c", ch);//关闭文件fclose(pf);pf = NULL;return 0;
}



int fputc ( int character, FILE * stream );

从建盘中输入信息到文件中,每次输入一个字符

  • 将字符写入流
  • 将一个字符写入流并推进位置指示器
  • 字符被写入流的内部位置指示器所指示的位置,然后自动向前移动一个
int main()
{//打开文件FILE* pf = fopen("data.txt", "w");if (pf == NULL){perror("fopen");return 1;}//写文件fputc("a", pf);//关闭文件fclose(pf);pf = NULL;return 0;
}

2、fgets和fputs

char * fgets ( char * str, int num, FILE * stream );

从文件中读取信息,每次读取一个字符串

  • 从流中获取字符串
  • 从流中读取字符,并将其作为C字符串存储到 str 中,直到读取 (num-1) 个字符,或者到达换行符或文件结束符
  • 换行符使 fgets 停止读取,但它被函数认为是一个有效字符,并包含在复制到 str 的字符串中。
  • 在复制到 str 的字符之后,将自动追加一个终止 null 字符。
  • 请注意,fgets 与 gets 有很大的不同:fgets 不仅接受流参数,而且允许指定 str 的最大长度,并在字符串中包含任何结束换行符
int main()
{//打开文件FILE * pf = fopen("data.txt", "r");if (pf == NULL){perror("fopen");return 1;}//读文件char arr[100] = { 0 };fgets(arr,5, pf);printf("%s", arr);//关闭文件fclose(pf);pf = NULL;return 0;
}


int fputs ( const char * str, FILE * stream );

从建盘中输入信息到文件中,每次输入一个字符串

  • 将字符串写入流
  • 将由 str 指向的C字符串写入流
  • 函数从指定的地址 (str) 开始复制,直到到达结束的空字符 ('\0'),这个终止的空字符不会复制到流中
int main()
{//打开文件FILE* pf = fopen("data.txt", "w");if (pf == NULL){perror("fopen");return 1;}//写文件fputs("abcde\n", pf);char arr[10] = "efghi";fputs(arr, pf);//关闭文件fclose(pf);pf = NULL;return 0;
}

3、fprintf和fscanf

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

将有格式的数据转换为字符串并且写入文件

  • 将格式化的数据写入流
  • 将由 format 指向的 C字符串写入流。如果 format 包含格式说明符(以%开头的子序列),则格式化format 之后的其他参数并将其插入到结果字符串中,以替换它们各自的说明符。
struct S
{char name[10];int age;float score;
};int main()
{struct S s = { "zhangsan",18,94.5};FILE* pf = fopen("data.txt", "w");//打开文件if (pf == NULL){perror("fopen");return 1;}//读文件fprintf(pf, "%s %d %f", s.name, &(s.age), &(s.score));//关闭文件fclose(pf);pf = NULL;return 0;
}

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

将文件中的字符串转换为有格式的数据并且读取出来

  • 从流中读取格式化的数据
  • 从流中读取数据,并根据参数格式将其存储到附加参数所指向的位置
  • 额外的参数应该指向已经分配的对象,其类型由格式字符串中相应的格式说明符指定
struct S
{char name[10];int age;float score;
};int main()
{struct S s = { 0 };FILE* pf = fopen("data.txt", "r");//打开文件if (pf == NULL){perror("fopen");return 1;}//读文件fscanf(pf, "%s %d %f", s.name, &(s.age), &(s.score));printf("%s %d %f", s.name, s.age, s.score);//关闭文件fclose(pf);pf = NULL;return 0;
}

4、fread和fwrite

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

将文件中的内容转换为二进制然后读取出来

  • 从流中读取数据块
  • 从流中读取一个由 count 元素组成的数组,每个元素的大小为 size 字节,并将它们存储在 ptr 指定的内存块中
  • 流的位置指示器按读取的总字节数前进
  • 如果成功读取的总字节数为 (size*count) 
  • 以二进制的方式读取文件
//二进制的方式读取文件
int main()
{int arr[10] = {0};//写文件FILE* pf = fopen("data.txt", "rb");if (pf == NULL){perror("fopen");return 1;}//二进制的读文件fread(arr, sizeof(arr[0]), sizeof(arr) / sizeof(arr[0]), pf);int i = 0;for (i = 0; i < 10; i++){printf("%d ", arr[i]);}//关闭文件fclose(pf);pf = NULL;return 0;
}

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

将数据转换为二进制然后写入文件

  • 将数据块写入流
  • 将由 count 元素组成的数组 (每个元素的大小为 size 字节) 从 ptr 所指向的内存块写入流中的当前位置
     
  • 流的位置指示器按写入的总字节数前进
  • 在内部,该函数将 ptr 指向的块解释为 unsigned char 类型的 (size*count) 元素数组,并将它们顺序写入流,就像对每个字节调用 fputc 一样
//二进制的方式写进文件
int main()
{int arr[] = { 1,2,3,4,5,6,7,8,9,10 };//写文件FILE*pf = fopen("data.txt", "wb");if (pf == NULL){perror("fopen");return 1;}//二进制的写文件fwrite(arr, sizeof(arr[0]), sizeof(arr)/sizeof(arr[0]), pf);//关闭文件fclose(pf);pf = NULL;return 0;
}

相关文章:

【C语言】文本操作函数fgetc、fputc、fgets、fputs、fprintf、fscanf、fread、fwrite

一、介绍 二、简要概括 三、函数的使用 1、fgetc和fputc int fgetc ( FILE * stream ); 从文件中读取信息&#xff0c;每次读取一个字符 从流中获取字符返回指定流的内部文件位置指示符当前指向的字符。然后将内部文件位置指示符推进到下一个字符 int main() {//打开文件FI…...

(19)VTK C++开发示例 --- 分隔文本读取器

文章目录 1. 概述2. CMake链接VTK3. main.cpp文件4. 演示效果 更多精彩内容&#x1f449;内容导航 &#x1f448;&#x1f449;VTK开发 &#x1f448; 1. 概述 本例采用坐标和法线&#xff08;x y z nx ny nz&#xff09;的纯文本文件&#xff0c;并将它们读入vtkPolyData并显示…...

C++ 中 std::thread 的高级应用

C 中 std::thread 的高级应用、常见坑&#xff0c;以及如何封装为类&#xff0c;适合做线程池、异步任务、后台 worker、并发调度等场景。内容结构如下&#xff1a; 一、std::thread 高级用法清单 1. 线程成员函数调用&#xff08;this 捕获&#xff09; class Worker { publ…...

Linux之彻底掌握防火墙-----安全管理详解

—— 小 峰 编 程 目录&#xff1a; 一、防火墙作用 二、防火墙分类 1、逻辑上划分&#xff1a;大体分为 主机防火墙 和 网络防火墙 2、物理上划分&#xff1a; 硬件防火墙 和 软件防火墙 三、硬件防火墙 四、软件防火墙 五、iptables 1、iptables的介绍 2、netfilter/…...

Linux安装ffmpeg7.1操作说明

安装yasm Index of /projects/yasm/releases/ 下载最新版 wget https://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz 解压 tar -zxvf yasm-1.3.0.tar.gz 编译及安装 ./configure make && make install 安装ffmpeg https://download.csdn.net/down…...

Java 加密与解密:从算法到应用的全面解析

Java 加密与解密&#xff1a;从算法到应用的全面解析 一、加密与解密技术概述 在当今数字化时代&#xff0c;数据安全至关重要。Java 加密与解密技术作为保障数据安全的关键手段&#xff0c;被广泛应用于各个领域。 加密是将明文数据通过特定算法转换为密文&#xff0c;使得…...

海思SDK的sensor驱动框架

对于海思的SDK之前一直对驱动的框架不清楚&#xff0c;只知道mpp的目录下的一些简单的业务demo&#xff0c;归根结底对这个SDK的框架还是不够了解&#xff0c;研究了一段时间才对该框架有一点认识。SDK是通过Makefile来管理和编译的所以对于Makefile文件需要有一定的理解&#…...

MyBatis-Plus 使用 Wrapper 构建动态 SQL 有哪些优劣势?

MyBatis-Plus (MP) 提供的 Wrapper (如 QueryWrapper, LambdaQueryWrapper, UpdateWrapper, LambdaUpdateWrapper) 是其核心特性之一&#xff0c;它允许我们在开发时以面向对象的方式构建 SQL 的 WHERE 条件、ORDER BY、SELECT 字段列表等部分。与传统的 MyBatis 在 XML 文件中…...

【PGCCC】Postgres 故障排除:修复重复的主键行

如何从表中删除不需要的重复行。这些重复行之所以“不需要”&#xff0c;是因为同一个值在指定为主键的列中出现多次。自从 glibc 好心地改变了排序方式后&#xff0c;我们发现这个问题有所增加。当用户升级操作系统并修改底层 glibc 库时&#xff0c;这可能会导致无效索引。 唯…...

Java多线程的暗号密码:5分钟掌握wait/notify

wait和join的区别 wait和join在使用上都是等待。 但是join是等待其他线程结束&#xff0c;而wait是等待其他线程的notify通知再运行。 当拿到锁的线程&#xff0c;发现要执行的任务时机不成熟的时候&#xff0c;使用wait进行阻塞等待&#xff0c;然后等时机成熟了再notify通…...

【重学Android】03.高版本 Android Studio 不能使用引用库资源ID的问题

问题背景 由于直接下载的最新版本Android Studio&#xff0c;然后直接创建的新项目&#xff0c;因此默认的工程配置相比以前的老版本有了不少的变化&#xff0c;Gradle的新版本使用&#xff0c;导致一些配置项也发生了变化&#xff0c;加上谷歌针对gradle.properties文件的一些…...

8. kubernetes的service原理

Kubernetes 的 Service 是集群内部和外部访问 Pod 的核心抽象层&#xff0c;解决了 Pod 动态 IP 变化及负载均衡问题。以下是其核心概念、原理及使用方法&#xff1a; 一、Service 的核心概念 概念说明服务发现通过标签选择器&#xff08;selector&#xff09;动态关联一组 Po…...

杭电oj(1087、1203、1003)题解

DP 即动态规划&#xff08;Dynamic Programming&#xff09;&#xff0c;是一种通过把原问题分解为相对简单的子问题&#xff0c;并保存子问题的解来避免重复计算&#xff0c;从而解决复杂问题的算法策略。以下从几个方面简述动态规划&#xff1a; 基本思想 动态规划的核心在…...

解锁安防新境界:XS9933四通道多合一同轴高清解码芯片方案

在安防监控领域&#xff0c;高清、高效、便捷一直是行业追求的目标。今天&#xff0c;我们要为大家介绍一款具有突破性的产品——XS9933四通道多合一同轴高清解码芯片方案&#xff0c;它将为安防监控带来全新的体验。 一、强大性能&#xff0c;高清呈现 XS9933是一款4通道模拟复…...

Mysql之存储过程

&#x1f3dd;️专栏&#xff1a;Mysql_猫咪-9527的博客-CSDN博客 &#x1f305;主页&#xff1a;猫咪-9527-CSDN博客 “欲穷千里目&#xff0c;更上一层楼。会当凌绝顶&#xff0c;一览众山小。 目录 1.存储过程概述 2.存储过程的基本语法 2.1创建存储过程 2.2调用存储过…...

2.第二章:政策法规与标准体系

文章目录 2.1 全球数据治理政策概览2.1.1 欧盟GDPR2.1.2 美国数据法规2.1.3 亚太地区数据法规 2.2 国际标准体系2.2.1 ISO/IEC 270012.2.2 NIST框架2.2.3 DAMA DMBOK2.2.4 其他国际标准 2.3 中国数据治理法规体系2.3.1 《网络安全法》2.3.2 《数据安全法》2.3.3 《个人信息保护…...

Kubernetes (k8s) 日常运维命令总结

一、资源查看 查看所有命名空间的 Pod kubectl get pod --all-namespaces查看指定命名空间的 Pod kubectl get pod --namespace <命名空间>查看所有部署&#xff08;Deployments&#xff09; kubectl get deployments.apps --all-namespaces查看所有守护进程集&#xff0…...

NLP高频面试题(五十三)——LLM中激活函数详解

引言 在现代大型语言模型架构中,激活函数是贯穿神经网络各层的关键组件。它们通过为线性变换结果引入非线性,从而赋予模型表达复杂语言模式的能力。选择合适的激活函数,不仅影响训练的稳定性与收敛速度,还在推理阶段决定了计算效率与模型性能。本文将系统梳理常见激活函数…...

跨平台软件开发探讨

一、跨平台开发核心思路 1. 代码复用最大化 通过抽象平台差异实现核心逻辑复用&#xff0c;理想情况下70%代码可复用&#xff0c;仅30%处理平台特性。 2. 分层架构设计 业务逻辑层&#xff1a;完全平台无关&#xff08;C/Rust&#xff09; 平台适配层&#xff1a;封装系统AP…...

网络原理————HTTP

1&#xff0c;HTTP简介 我们上一期谈到了网络编程尤其是TCP和UDP&#xff0c;使用网络套接字来实现网络编程&#xff0c;上一期忘记说了&#xff0c;我们使用TCP的时候&#xff0c;我们用了线程池&#xff0c;这样就可以处理很多客户端而不会阻塞&#xff0c;那么如果客户端一…...

安装Jupyter Notebook 之不断报错 差点放弃版

error: subprocess-exited-with-error Preparing metadata (pyproject.toml) did not run successfully. │ exit code: 1 ╰─> [6 lines of output] Cargo, the Rust package manager, is not installed or is not on PATH. This package requires Rust and Cargo to com…...

w~大模型~合集13

我自己的原文哦~ https://blog.51cto.com/whaosoft/13864163 #TextRCNN、TextCNN、RNN 小小搬运工周末也要学习一下~~虽然和世界没关 但还是地铁上看书吧, 大老勿怪 今天来说一下 文本分类必备经典模型 模型 SOTA&#xff01;模型资源站收录情况 模型来源论文 RAE ​…...

【华为】防火墙双击热备-之-主备模式-单外网线路

FW1和FW2的业务接口都工作在三层&#xff0c;上行连接二层交换机。上行交换机连接运营商的接入点&#xff0c;运营商为企业分配的IP地址为100.100.100.2。现在希望FW1和FW2以主备备份方式工作。正常情况下&#xff0c;流量通过FW1转发&#xff1b;当FW1出现故障时&#xff0c;流…...

学习记录:DAY16

Maven 进阶与前端实战 前言 二轮考核的内容下来了&#xff0c;由整体项目构建转为实现特定模块的功能。对细节的要求更高了&#xff0c;而且有手搓线程池、手搓依赖注入等进阶要求&#xff0c;又有得学力。嘻嘻&#xff0c;太简单了&#xff0c;只要我手搓 Spring Boot 框架……...

基于 Spring Boot 瑞吉外卖系统开发(六)

基于 Spring Boot 瑞吉外卖系统开发&#xff08;六&#xff09; 菜品列表 在系统管理端首页&#xff0c;单击左侧菜单栏中的“菜品管理”&#xff0c;会在右侧打开菜品管理页面。 请求URL/dish/page&#xff0c;请求方法GET,请求参数page&#xff0c;pageSize。 该菜品列表…...

香港服务器租用需要哪些性能要求

在如今数字化的时代&#xff0c;租用香港服务器成为了许多企业和个人的选择。但你知道租用香港服务器需要哪些性能要求吗&#xff1f;香港服务器租用需满足硬件性能、网络质量、安全合规、扩展能力四大核心要求&#xff0c;旨在支撑业务高并发、低延迟、稳定安全的运行环境。其…...

LLama Factory从入门到放弃

目录 简介 安装 LLama Factory界面介绍 数据格式要求 微调训练 今天在这里介绍一种常用的大模型微调框架——LLama Factory。 简介 LLama Factory 是一个高效的界面化大语言模型微调工具库&#xff0c;支持多种参数高效微调技术&#xff0c;提供简洁接口和丰富示例&#…...

钧瓷产业原始创新的许昌共识:技术破壁·产业再造·生态重构(一)

大禹智库 第 9期〔总第463期〕2025-4-23 钧瓷产业许昌共识&#xff1a;技术破壁产业再造生态重构&#xff08;一&#xff09; ——基于钧瓷产业一体化与数字化原始创新的双轮驱动实践 在当今快速发展的科技领域&#xff0c;创新已成为推动进步的核心动力&#xff0c;企业生存和…...

思科路由器密码绕过+重置

思科路由器密码忘记&#xff0c;重新设置密码不重置配置 1、路由器在初始化过程中会询问是否进行初始化配置&#xff0c;输入no&#xff0c;将直接进入路由器&#xff0c;不会出现用户设置、密码设置等操作。 Would you like to enter the initial configuration dialog? [ye…...

OpenCV 图形API(52)颜色空间转换-----将 NV12 格式的图像数据转换为 RGB 格式的图像

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 将图像从 NV12 (YUV420p) 色彩空间转换为 RGB。该函数将输入图像从 NV12 色彩空间转换到 RGB。Y、U 和 V 通道值的常规范围是 0 到 255。 输出图…...

为什么圆形在GeoJSON中被表示为多边形(Polygon)而不是圆形类型

GeoJSON规范中没有"圆形"类型 GeoJSON是一种用于表示地理空间数据的标准格式&#xff0c;它的规范中只定义了以下几种基本几何类型&#xff1a; Point (点) LineString (线) Polygon (多边形) MultiPoint (多点) MultiLineString (多线) MultiPolygon (多多边形) Ge…...

【解读】Chrome 浏览器实验性功能全景

Chrome 浏览器提供了大量可配置的实验性或功能性设置&#xff0c;主要涉及安全、性能、多媒体、Web API、隐私等多个方面&#xff0c;这些设置可在 Chrome 浏览器的 flags 页面进行调整。 安全相关设置 不安全源设置&#xff1a;可通过#unsafely-treat-insecure-origin-as-sec…...

LInux平均负载

Linux平均负载是**指在一定时间内&#xff0c;系统中处于可运行状态或正在等待资源的进程数的平均值。**它是衡量系统整体工作负载的重要指标&#xff0c;反映了系统的繁忙程度。平均负载通常分为过去1分钟、5分钟和15分钟的平均值。 理解平均负载的关键点 与CPU核心数的关系 *…...

【人工智能】Ollama 负载均衡革命:多用户大模型服务的高效调度与优化

《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 在 多用户大模型推理 场景下,负载均衡 是确保高并发、低延迟的关键挑战。本文以 Ollama(一个流行的本地大模型运行框架)为例,深入探讨 …...

deepseek-php-client开源程序是强力维护的 PHP API 客户端,允许您与 deepseek API 交互

一、软件介绍 文末提供程序和源码下载学习 deepseek-php-client开源程序是强力维护的 PHP API 客户端&#xff0c;允许您与 deepseek API 交互。 二、Features 特点 无缝 API 集成&#xff1a;DeepSeek 人工智能功能的 PHP 优先接口。流畅构建器模式&#xff1a;可链式调用的…...

ThinkPHP快速使用手册

目录 介绍 安装&#xff08;windows环境&#xff09; 安装Composer 安装ThinkPHP 目录结构 配置文件 第一个接口&#xff08;Controller层&#xff09; Hello World 自定义Controller 请求参数 获取查询参数&#xff08;Get请求&#xff09; 获取指定请求参数 获取…...

文档构建:Sphinx全面使用指南 — 强化篇

文档构建&#xff1a;Sphinx全面使用指南 — 强化篇 Sphinx 是一款强大的文档生成工具&#xff0c;使用 reStructuredText 作为标记语言&#xff0c;通过扩展兼容 Markdown&#xff0c;支持 HTML、PDF、EPUB 等多种输出格式。它具备自动索引、代码高亮、跨语言支持等功能&#…...

Laravel 自定义 Artisan 命令行

1.什么是Artisan 命令行 Artisan 是 Laravel 中自带的命令行接口。Artisan 以 artisan 脚本的方式存在于应用的根目录中&#xff0c;提供了许多有用的命令。 查看所有命令行 php artisan list系统自带我很多的命令&#xff0c;大家可以自己去试一下&#xff0c;例如&#xf…...

node.js 实战——(fs模块 知识点学习)

fs 模块 也可以称之为文件系统模块&#xff0c;是node中的内置模块&#xff0c;可以实现与硬盘的交互。比如文件的创建、删除、重命名、移动&#xff0c;还有文件内容的写入、读取&#xff0c;以及文件夹的相关操作 #mermaid-svg-NAByzqTngZUOyQcY {font-family:"trebuch…...

openharmony5.0.0中C++公共基础类测试-线程相关(一)

C公共基础类测试及源码剖析 延续传统&#xff0c;show me the code&#xff0c;除了给出应用示例还重点分析了下openharmony中的实现。 简介 openharmony中提供了C公共基础类库&#xff0c;为标准系统提供了一些常用的C开发工具类&#xff0c;本文分析其实现&#xff0c;并给…...

前缀和相似题共赏

P3131 [USACO16JAN] Subsequences Summing to Sevens S P3131 [USACO16JAN] Subsequences Summing to Sevens S 思路: 一看到区间和我们应该就能马上想到把这个区间拆分成两个前缀相减的形式 式子为:(Pre[r] - Pre[l-1]) % 7 0 Pre[r] % 7 Pre[l-1] % 7 Pre[r] Pre[l-1] 所…...

一文读懂https

http和https的关系 http&#xff0c;应用层协议&#xff0c;由于采用明文传输&#xff0c;不安全&#xff0c;还有很多其他安全问题&#xff0c;为此就衍生出了同为应用层协议的https。https在http的基础上引入了SSL&#xff08;Secure Socket Layer 安全套接层&#xff09;和…...

为什么 requests 不是 python 标准库?

为什么 requests 不是 python 标准库&#xff1f; requests开发者Kenneth之前还严肃地征求过这个意见&#xff0c;感兴趣的可以看看 https://github.com/psf/requests/issues/2424 我大致瞅了下&#xff0c;基本都不赞成requests加入python标准库&#xff0c;主要有以下两个原…...

[STM32] 4-1 UART与串口通信

文章目录 前言4-1 UART与串口通信串口简介串口接线 数据帧串口的数据帧格式空闲位起始位数据位校验位&#xff08;位于数据位内部&#xff09;奇偶校验 停止位 异步通信和波特率同步通信异步通信波特率 流控的概念串口流控的工作原理 随堂测试问题1:说出Tx、Rx、CTS、RTS、VCC、…...

7-1 三种语言的单词转换

编写程序实现&#xff1a;首先从键盘输入若干个中文与英文单词的偶对&#xff0c;以空行作结束标记&#xff1b;再输入若干个英文与丹麦文单词的偶对&#xff0c;以空行作结束标记。然后输入一个中文单词&#xff0c;输出对应的丹麦文单词&#xff1b;若不存在该单词&#xff0…...

高防IP是什么

"高防IP"是指"高防护IP"&#xff0c;是一种防御DDoS&#xff08;分布式拒绝服务攻击&#xff09;的网络安全服务。在分布式拒绝服务攻击中&#xff0c;攻击者会利用许多不同的计算机或者其他设备&#xff0c;通过向目标发送大量的网络请求来尝试使目标服务…...

基于javaweb的SSM宠物商城设计与实现(源码+文档+部署讲解)

技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论文…...

《TCP/IP详解 卷1:协议》之第六章:ICMP:Internet控制报文协议

目录 一、ICMP协议 二、ICMP 报文格式 三、ICMP询问报文 四、ICMP 差错报告报文 五、ICMP端口不可达差错 一、ICMP协议 ICMP&#xff08;Internet Control Message Protocol&#xff0c;互联网控制消息协议&#xff09;是网络层的一个核心协议&#xff0c;用于在IP主机、…...

SpringBoot项目,密码加密之“BCrypt加密”

前言 这种方法&#xff0c;是当前推荐的密码加密方式。&#xff08;现在不推荐使用MD5加密了&#xff09;。 如何在springboot项目中&#xff0c;使用bcrypt加密&#xff1f;请分步骤详细介绍一下 一.在Spring Boot项目中使用BCrypt加密的详细步骤 BCrypt是当前推荐用于密码存…...

外贸获客新革命:基于AI的搜索引擎排名攻防战——48小时抢占谷歌TOP3的技术逻辑与实战路径

一、传统SEO的三大死亡陷阱&#xff08;为什么你的客户正在被AI截流&#xff1f;&#xff09; 关键词荒漠化 人工筛选关键词效率不足1%&#xff0c;95%的B2B采购商使用长尾词搜索&#xff08;如"IP68 waterproof LED strip for outdoor projects"&#xff09;而非通…...