字符串转浮点数函数atof、strtod、strtof和strtold使用场景
字符串转浮点数函数 atof、strtod、strtof 和 strtold 在 C 语言标准库中都有各自的使用场景,它们的主要功能是将字符串转换为浮点数,但在处理的浮点数类型、错误处理机制和精度方面有所不同。
一、atof
函数使用场景
atof
(ASCII to Float)函数在C语言编程中非常有用,尤其是在需要将字符串形式的数字转换为浮点数进行计算或处理时。以下是一些具体的使用场景。
- 用户输入处理:当程序需要从用户输入中获取数值时,用户输入通常是以字符串形式提供的。使用
atof
可以将这些字符串转换为浮点数以便后续计算。 - 文件读取:在读取包含数值数据的文件时,数据通常也是以文本形式存储的。
atof
可以用于解析文件中的数值字符串。 - 数据转换:在程序内部,有时需要将存储为字符串的数值转换为浮点数以进行数学运算或比较。
- 配置文件解析:许多配置文件中的数据是以文本形式存储的,使用
atof
可以方便地将这些数据转换为程序可以操作的数值类型。 - 代码示例:以下是一个简单的C语言代码示例,展示了如何使用
atof
函数将字符串转换为浮点数,并进行一些基本的数学运算:
#include <stdio.h>
#include <stdlib.h>int main() {// 示例字符串const char *numStr1 = "3.14159";const char *numStr2 = "-2.71828";const char *invalidStr = "abc123"; // 无效的字符串,将返回0.0// 使用atof进行转换double num1 = atof(numStr1);double num2 = atof(numStr2);double invalidNum = atof(invalidStr);// 输出转换结果printf("The converted number from '%s' is: %f\n", numStr1, num1);printf("The converted number from '%s' is: %f\n", numStr2, num2);printf("The converted number from '%s' (invalid string) is: %f\n", invalidStr, invalidNum);// 进行一些数学运算double sum = num1 + num2;double difference = num1 - num2;double product = num1 * num2;double quotient = num1 / num2; // 注意:除以0会导致未定义行为,这里仅作为示例// 输出运算结果printf("Sum: %f\n", sum);printf("Difference: %f\n", difference);printf("Product: %f\n", product);// 在进行除法之前,应该检查除数是否为零if (num2 != 0.0) {printf("Quotient: %f\n", quotient);} else {printf("Division by zero is undefined.\n");}return 0;
}
二、strtod使用场景
strtod
函数是C标准库中的一个强大工具,用于将字符串转换为浮点数。与atof
相比,strtod
提供了更详细的错误处理和范围检查。以下是一些具体的使用场景。
- 精确数值转换:当需要将字符串精确转换为浮点数时,
strtod
能够处理包括正负号、小数点、科学计数法(如1.23e4
)在内的多种格式。 - 错误处理:
strtod
能够返回转换过程中遇到的第一个无效字符的指针,从而允许程序识别并处理输入字符串中的错误部分。 - 范围检查:
strtod
能够检测并处理转换过程中可能发生的溢出和下溢情况,避免返回未定义的结果。 - 用户输入处理:在处理用户输入时,
strtod
可以帮助程序验证输入的有效性,并给出适当的反馈。 - 配置文件解析:在解析包含浮点数数据的配置文件时,
strtod
能够准确地将字符串转换为数值,同时处理可能的错误和异常情况。 - 代码示例:以下是一个C语言代码示例,展示了如何使用
strtod
函数将字符串转换为浮点数,并进行错误处理和范围检查:
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <math.h>
#include <float.h>int main() {// 示例字符串const char *numStr1 = "3.14159";const char *numStr2 = "-2.71828e3";const char *invalidStr = "abc123"; // 无效的字符串const char *overflowStr = "1e+500"; // 超出范围的字符串// 转换结果变量和错误指针char *endptr;errno = 0; // 重置errno以检测溢出// 使用strtod进行转换并处理结果double num1 = strtod(numStr1, &endptr);if (*endptr != '\0') {printf("Conversion of '%s' failed at character: '%c'\n", numStr1, *endptr);} else {printf("The converted number from '%s' is: %f\n", numStr1, num1);}double num2 = strtod(numStr2, &endptr);if (*endptr != '\0') {printf("Conversion of '%s' failed at character: '%c'\n", numStr2, *endptr);} else {printf("The converted number from '%s' is: %f\n", numStr2, num2);}double invalidNum = strtod(invalidStr, &endptr);if (endptr == invalidStr) {printf("No valid conversion could be performed on '%s'.\n", invalidStr);} else {// 注意:这里invalidNum将是0.0,因为字符串不是有效的浮点数// 但由于endptr已经检查过,这里主要是为了演示输出printf("The converted number from '%s' (invalid input, should be 0.0) is: %f\n", invalidStr, invalidNum);}double overflowNum = strtod(overflowStr, &endptr);if (errno == ERANGE) {if (overflowNum == DBL_MAX || overflowNum == -DBL_MAX) {printf("Conversion of '%s' resulted in overflow.\n", overflowStr);} else if (overflowNum == 0.0 && (overflowStr[0] == '-' || overflowStr[0] != '-')) {// 理论上这里不应该处理为下溢,因为下溢应该返回一个非零的极小值// 但为了完整性,这里检查是否为0.0(尽管这不太可能是下溢的结果)// 注意:这个条件判断可能有些多余,因为ERANGE通常与DBL_MAX/-DBL_MAX关联printf("Conversion of '%s' resulted in a value that is unexpectedly 0.0 (this is not typical underflow behavior).\n", overflowStr);}// 其他ERANGE情况(如非标准的下溢行为)也可以在这里处理,但通常不需要} else {printf("The converted number from '%s' is: %f\n", overflowStr, overflowNum);}// 重置errno以避免对其他函数调用的影响errno = 0;return 0;
}
三、strtof使用场景
这个函数在处理文本输入或解析包含浮点数的字符串时非常有用。例如,从文件、用户输入或网络数据中读取浮点数时,strtof
可以帮助将这些数据转换为程序可以进一步处理的数值类型。
- 文本解析:从文本文件中读取包含浮点数的数据。
- 用户输入:从命令行或图形用户界面接收用户输入的浮点数。
- 数据通信:从网络或其他通信协议中接收浮点数数据,这些数据通常以字符串形式传输。
- 数据转换:将存储在字符串中的数值数据转换为浮点数以便进行数学计算。
- 代码示例:下面是一个使用
strtof
函数的简单示例:
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <float.h>int main() {// 示例字符串const char *numStr1 = "3.14159";const char *numStr2 = "-2.71828e3";const char *invalidStr = "abc123"; // 无效的字符串const char *underflowStr = "-1e-40"; // 接近下溢的字符串const char *overflowStr = "1e+50"; // 接近溢出的字符串(注意:C标准不保证能表示1e+50,这取决于系统)// 转换结果变量和错误指针char *endptr;errno = 0; // 重置errno以检测溢出或下溢// 使用strtof进行转换并处理结果float num1 = strtof(numStr1, &endptr);if (*endptr == '\0') {printf("The converted number from '%s' is: %f\n", numStr1, num1);} else {printf("Conversion of '%s' failed at character: '%c'\n", numStr1, *endptr);}float num2 = strtof(numStr2, &endptr);if (*endptr == '\0') {printf("The converted number from '%s' is: %f\n", numStr2, num2);} else {printf("Conversion of '%s' failed at character: '%c'\n", numStr2, *endptr);}float invalidNum = strtof(invalidStr, &endptr);if (endptr == invalidStr) {printf("No valid conversion could be performed on '%s'.\n", invalidStr);} else {// 注意:这里invalidNum的值将是0.0,因为字符串不是有效的浮点数printf("The converted number from '%s' (invalid input, should be 0.0) is: %f\n", invalidStr, invalidNum);}float underflowNum = strtof(underflowStr, &endptr);if (errno == ERANGE && underflowNum == 0.0 && *underflowStr == '-') {// 检查下溢(注意:这个条件可能不够精确,因为ERANGE也可能由于溢出而设置)// 在实践中,下溢通常不会导致errno被设置为ERANGE,而是返回一个非常接近0的非零值// 但为了演示,我们在这里检查printf("Conversion of '%s' may have resulted in underflow (this is not typical behavior).\n", underflowStr);} else if (*endptr == '\0') {printf("The converted number from '%s' is: %f\n", underflowStr, underflowNum);} else {printf("Conversion of '%s' failed at character: '%c'\n", underflowStr, *endptr);}float overflowNum = strtof(overflowStr, &endptr);if (errno == ERANGE && (overflowNum == FLT_MAX || overflowNum == -FLT_MAX)) {// 检查溢出printf("Conversion of '%s' resulted in overflow.\n", overflowStr);} else if (*endptr == '\0') {printf("The converted number from '%s' is: %f\n", overflowStr, overflowNum);} else {printf("Conversion of '%s' failed at character: '%c'\n", overflowStr, *endptr);}// 重置errno以避免对其他函数调用的影响errno = 0;return 0;
}
四、strtold使用场景
strtold
函数用于将字符串转换为长双精度浮点数(long double
类型)。这个函数在处理需要高精度浮点运算的场景中非常有用,比如科学计算、金融计算或任何需要处理非常大或非常小的浮点数的应用。
- 高精度计算:当需要比
double
类型提供更高精度的浮点运算时。 - 科学计算:在科学研究中,经常需要处理非常大或非常小的数值,这些数值可能超出了
double
类型的表示范围或精度。 - 金融计算:在金融领域,某些计算可能需要高精度的浮点数来避免舍入误差。
- 数据解析:从文本文件、用户输入或网络数据中读取高精度的浮点数数据。
- 代码示例:下面是一个使用
strtold
函数的简单示例:
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <float.h>int main() {// 示例字符串const char *numStr1 = "3.14159265358979323846";const char *numStr2 = "-1.2345678901234567890123456789e+100";const char *invalidStr = "abc123.456"; // 无效的字符串const char *underflowStr = "-1e-40000"; // 接近下溢的字符串(注意:这取决于系统的长双精度浮点表示能力)const char *overflowStr = "1e+40000"; // 接近溢出的字符串(同样取决于系统)// 转换结果变量和错误指针char *endptr;errno = 0; // 重置errno以检测溢出或下溢// 使用strtold进行转换并处理结果long double num1 = strtold(numStr1, &endptr);if (*endptr == '\0') {printf("The converted number from '%s' is: %Lf\n", numStr1, num1);} else {printf("Conversion of '%s' failed at character: '%c'\n", numStr1, *endptr);}long double num2 = strtold(numStr2, &endptr);if (errno == ERANGE) {// 检查溢出或下溢(注意:ERANGE可能由于溢出或下溢而设置,但下溢通常不会导致ERANGE)if (num2 == LDBL_MAX || num2 == -LDBL_MAX) {printf("Conversion of '%s' resulted in overflow.\n", numStr2);} else if (num2 == 0.0 && *numStr2 == '-') {// 注意:这个条件可能不够精确,因为下溢通常不会导致ERANGE被设置// 但为了演示,我们在这里检查printf("Conversion of '%s' may have resulted in underflow (this is not typical behavior).\n", numStr2);} else {// 其他ERANGE情况(理论上不应该发生,除非实现有误)printf("Unexpected ERANGE error during conversion of '%s'.\n", numStr2);}errno = 0; // 重置errno以避免影响后续检查} else if (*endptr == '\0') {printf("The converted number from '%s' is: %Lf\n", numStr2, num2);} else {printf("Conversion of '%s' failed at character: '%c'\n", numStr2, *endptr);}long double invalidNum = strtold(invalidStr, &endptr);if (endptr == invalidStr) {printf("No valid conversion could be performed on '%s'.\n", invalidStr);} else {// 注意:这里invalidNum的值将是0.0L,因为字符串不是有效的浮点数printf("The converted number from '%s' (invalid input, should be 0.0) is: %Lf\n", invalidStr, invalidNum);}// 对于underflowStr和overflowStr,由于它们的值可能超出了long double的表示范围,// 因此转换结果可能不准确或导致未定义行为。在实际应用中,应该避免对这样的字符串进行转换,// 或者在转换之前先检查字符串的值是否在可接受的范围内。// 这里为了演示,我们仍然进行转换,但不做进一步的错误处理(因为处理这些极端情况很复杂,// 并且通常依赖于特定的系统和编译器实现)。long double underflowNum = strtold(underflowStr, &endptr);// 注意:下溢通常不会导致errno被设置为ERANGE,而是返回一个非常接近0的非零值// 这里我们不做特定的下溢检查,只是打印结果printf("The converted number from '%s' is: %Lf\n", underflowStr, underflowNum);long double overflowNum = strtold(overflowStr, &endptr);// 检查溢出(注意:这取决于系统和编译器的实现)if (errno == ERANGE && (overflowNum == LDBL_MAX || overflowNum == -LDBL_MAX)) {printf("Conversion of '%s' resulted in overflow.\n", overflowStr);} else {// 如果没有溢出,或者溢出检查不准确(因为依赖于实现),则打印结果printf("The converted number from '%s' is: %Lf\n", overflowStr, overflowNum);}// 重置errno以避免对其他函数调用的影响errno = 0;return 0;
}
五、总结
- 精度:
strtold
>strtod
>atof
(atof
实际上也转换为double
,但strtold
提供更高的精度)。strtof
转换为float
,精度低于double
。 - 错误处理:
strtod
、strtof
和strtold
都提供了更详细的错误处理机制(通过errno
和endptr
),而atof
的错误处理相对简单。 - 使用场景:选择哪个函数取决于具体需求,包括需要的浮点数类型、是否需要错误处理以及对精度的要求。
在实际编程中,应根据具体的应用场景和需求来选择最合适的函数。如果需要处理浮点数并且需要更好的错误处理机制,那么 strtod
是一个更好的选择。如果只需要简单的字符串到浮点数的转换,并且不介意可能的错误处理限制,那么 atof
也是一个可行的选项。对于需要更高精度的应用,strtold
是最佳选择。而 strtof
则适用于需要 float
类型结果的情况。
相关文章:
字符串转浮点数函数atof、strtod、strtof和strtold使用场景
字符串转浮点数函数 atof、strtod、strtof 和 strtold 在 C 语言标准库中都有各自的使用场景,它们的主要功能是将字符串转换为浮点数,但在处理的浮点数类型、错误处理机制和精度方面有所不同。 一、atof 函数使用场景 atof(ASCII to Float&…...
GD32F4xx系列微控制器中,定时器的主模式(Master Mode)和从模式(Slave Mode)
在GD32F4xx系列微控制器中,定时器的主模式(Master Mode)和从模式(Slave Mode)是两种不同的工作模式,它们的主要区别在于定时器的操作是否依赖于外部信号或另一个定时器的输出信号。以下是对这两种模式的详细…...
深度学习系列--03.激活函数
一.定义 激活函数是一种添加到人工神经网络中的函数,它为神经网络中神经元的输出添加了非线性特性 在神经网络中,神经元接收来自其他神经元的输入,并通过加权求和等方式计算出一个净输入值。激活函数则根据这个净输入值来决定神经元是否应该…...
在linux 中搭建deepseek 做微调,硬件配置要求说明
搭建 可参考 使用deepseek-CSDN博客 官方网站:DeepSeek DeepSeek 是一个基于深度学习的开源项目,旨在通过深度学习技术来提升搜索引擎的准确性和效率。如果你想在 Linux 系统上搭建 DeepSeek,你可以遵循以下步骤。这里我将提供一个基本的指…...
机器学习之数学基础:线性代数、微积分、概率论 | PyTorch 深度学习实战
前一篇文章,使用线性回归模型逼近目标模型 | PyTorch 深度学习实战 本系列文章 GitHub Repo: https://github.com/hailiang-wang/pytorch-get-started 本篇文章内容来自于 强化学习必修课:引领人工智能新时代【梗直哥瞿炜】 线性代数、微积分、概率论 …...
MySQL - Navicat自动备份MySQL数据
对于从事IT开发的工程师,数据备份我想大家并不陌生,这件工程太重要了!对于比较重要的数据,我们希望能定期备份,每天备份1次或多次,或者是每周备份1次或多次。 如果大家在平时使用Navicat操作数据库&#x…...
javaEE-9.HTML入门
目录 一.什么是html 二.认识html标签 1.标签的特点: 2.html文件基本结构 3.标签的层次结构 三、html工具 四、创建第一个文件 五.html常见标签 1标题标签h1-h6 2.段落标签:p 3.换行标签:br 4.图片标签:img 图片路径有1三种表示形式: 5.超链接:a 链接的几种形式: …...
springcloud微服务使用不同端口启动同一服务
若想同时启动两个服务,则会产生端口冲突,在启动类设置界面,添加虚拟机选项,随后设置 -Dserver.portxxxx即可...
JavaScript系列(61)--边缘计算应用开发详解
JavaScript边缘计算应用开发详解 🌐 今天,让我们深入探讨JavaScript的边缘计算应用开发。边缘计算是一种将计算和数据存储分布到更靠近数据源的位置的架构模式,它能够提供更低的延迟和更好的实时性能。 边缘计算基础架构 🌟 &am…...
【容器技术01】使用 busybox 构建 Mini Linux FS
使用 busybox 构建 Mini Linux FS 构建目标 在 Linux 文件系统下构建一个 Mini 的文件系统,构建目标如下: minilinux ├── bin │ ├── ls │ ├── top │ ├── ps │ ├── sh │ └── … ├── dev ├── etc │ ├── g…...
Effective Python系列(1.3):使用zip函数同时遍历两个迭代器
zip函数是 Python 中的一个内置函数,用于将多个可迭代对象(如列表、元组等)的元素配对,生成一个迭代器。 使用 zip 函数的好处之一就是能够节省内存空间,因为该函数会创建惰性生成器,每次遍历时只生成一个元…...
gitlab个别服务无法启动可能原因
目录 一、gitlab的puma服务一直重启 1. 查看日志 2. 检查配置文件 3. 重新配置和重启 GitLab 4. 检查系统资源 5. 检查依赖和服务状态 6. 清理和优化 7. 升级 GitLab 8. 查看社区和文档 二、 gitlab个别服务无法启动可能原因 1.服务器内存或磁盘已满 2.puma端口冲突…...
基于Springboot+vue的租车网站系统
基于SpringbootVue的租车网站系统是一个现代化的在线租车平台,它结合了Springboot的后端开发能力和Vue的前端交互优势,为用户和汽车租赁公司提供了一个高效、便捷、易用的租车体验和管理工具。以下是对该系统的详细介绍: 一、系统架构 后…...
Github - 记录一次对“不小心包含了密码的PR”的修复
Github - 记录一次对“不小心包含了密码的PR”的修复 前言 和好朋友一起开发一个字节跳动青训营抖音电商后端(now private)的项目,某大佬不小心把本地一密码commit上去并提了PR。 PR一旦发出则无法被删除,且其包含的commit也能被所有能看到这个仓库的…...
【后端开发】系统设计101——通信协议,数据库与缓存,架构模式,微服务架构,支付系统(36张图详解)
【后端开发】系统设计101——通信协议,数据库与缓存,架构模式,微服务架构,支付系统(36张图) 文章目录 1、通信协议通信协议REST API 对比 GraphQL(前端-web服务)grpc如何工作&#x…...
SpringMVC请求
一、RequestMapping注解 RequestMapping注解的作用是建立请求URL和处理方法之间的对应关系 RequestMapping注解可以作用在方法和类上 1. 作用在类上:第一级的访问目录 2. 作用在方法上:第二级的访问目录 3. 细节:路径可以不编写 / 表示应…...
【学术征稿-组织单位 武汉理工大学西安理工大学、西安财经大学】第三届通信网络与机器学习(CNML 2025)
重要信息 官网:www.iccnml.org 大会时间:2025年2月21日-23日 大会地点:中国 南京 通信网络 通信是人与人之间通过某种媒体进行的信息交流与传递。网络是用物理链路将各个孤立的工作站或主机相连在一起,组成的数据链路。通信网…...
代码随想录算法训练营打卡第55天:并查集相关问题;
Java并查集的模板 //并查集模板 class DisJoint{private int[] father;public DisJoint(int N) {father new int[N];for (int i 0; i < N; i){father[i] i;}}public int find(int n) {return n father[n] ? n : (father[n] find(father[n]));}public void join (int …...
设计模式学习
1.设计模式分类 1.创建型模式 用于描述“怎样创建对象”,主要特点是“将对象的创建与使用分离”。 单例,原型,工厂方法,抽象工厂,建造者 2.结构型模式 用于描述如何将类或对象按某种布局组成更大的结构 代理&…...
js-对象-JSON
JavaScript自定义对象 JSON 概念: JavaScript Object Notation,JavaScript对象标记法. JSON 是通过JavaScript 对象标记法书写的文本。 由于其语法简单,层次结构鲜明,现多用于作为数据载体,在网络中进行数据传输. json中属性名(k…...
C/C++编译器
C/C 代码是不可跨平台的,Windows 和 Unix-like 有着不同的 API,C/C 在不同平台有着不同编译器。 MSVC Windows 平台,MSVC 是 Visual Studio 中自带的 C/C 编译器。 GCC Unix-like 平台,GCC 原名 GNU C Compiler,后…...
【R语言】数据操作
一、查看和编辑数据 1、查看数据 直接打印到控制台 x <- data.frame(a1:20, b21:30) x View()函数 此函数可以将数据以电子表格的形式进行展示。 用reshape2包中的tips进行举例: library("reshape2") View(tips) head()函数 查看前几行数据&…...
Linux 安装 RabbitMQ
Linux下安装RabbitMQ 1 、获取安装包 # 地址 https://github.com/rabbitmq/erlang-rpm/releases/download/v21.3.8.9/erlang-21.3.8.9-1.el7.x86_64.rpm erlang-21.3.8.9-1.el7.x86_64.rpmsocat-1.7.3.2-1.el6.lux.x86_64.rpm# 地址 https://github.com/rabbitmq/rabbitmq-se…...
“AI智能分析综合管理系统:企业管理的智慧中枢
在如今这个快节奏的商业世界里,企业面临的挑战越来越多,数据像潮水一样涌来,管理工作变得愈发复杂。为了应对这些难题,AI智能分析综合管理系统闪亮登场,它就像是企业的智慧中枢,让管理变得轻松又高效。 过去…...
2024最新版Java面试题及答案,【来自于各大厂】
发现网上很多Java面试题都没有答案,所以花了很长时间搜集整理出来了这套Java面试题大全~ 篇幅限制就只能给大家展示小册部分内容了,需要完整版的及Java面试宝典小伙伴点赞转发,关注我后在【翻到最下方,文尾点击名片】即可免费获取…...
调用腾讯云批量文本翻译API翻译srt字幕
上一篇文章介绍了调用百度翻译API翻译日文srt字幕的方法。百度翻译API是get方式调用,参数都放在ur中,每次调用翻译文本长度除了接口限制外,还有url长度限制,而日文字符通过ur转码后会占9个字符长度,其实从这个角度来讲…...
【分块解决大文件上传的最佳实践】
前言 前几天看了一篇关于大文件上传分块实现的博客,代码实现过于复杂且冗长,而且没有进行外网上传的测试。因此,我决定自己动手实现一个大文件上传,并进行优化。 实现思路 在许多应用中,大文件上传是常见的需求&…...
机器学习中的关键概念:通过SKlearn的MNIST实验深入理解
欢迎来到我的主页:【Echo-Nie】 本篇文章收录于专栏【机器学习】 1 sklearn相关介绍 Scikit-learn 是一个广泛使用的开源机器学习库,提供了简单而高效的数据挖掘和数据分析工具。它建立在 NumPy、SciPy 和 matplotlib 等科学计算库之上,支持…...
【Elasticsearch】post_filter
post_filter是 Elasticsearch 中的一种后置过滤机制,用于在查询执行完成后对结果进行过滤。以下是关于post_filter的详细介绍: 工作原理 • 查询后过滤:post_filter在查询执行完毕后对返回的文档集进行过滤。这意味着所有与查询匹配的文档都…...
Git基础
目录 一、Git介绍二、Git下载与配置1、下载安装Git2、Git配置2.1 注册码云账号2.2 Git配置 三、Git开发流程1、相关代码2、上述代码执行截图示例 四、Git提交&撤销五、Git资料 一、Git介绍 Git是一种分布式版本控制系统,广泛用于软件开发项目的版本管理。它由L…...
深度学习系列--02.损失函数
一.定义 损失函数(Loss Function)是机器学习和深度学习中用于衡量模型预测结果与真实标签之间差异的函数,它在模型训练和评估过程中起着至关重要的作用 二.作用 1.指导模型训练 提供优化方向:在训练模型时,我们的目…...
如何在自己mac电脑上私有化部署deep seek
在 Mac 电脑上私有化部署 DeepSeek 的步骤如下: 1. 环境准备 安装 Homebrew(如果尚未安装): Homebrew 是 macOS 上的包管理工具,用于安装依赖。 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com…...
攻防世界 fileclude
代码审计 WRONG WAY! <?php include("flag.php"); highlight_file(__FILE__);//高亮显示文件的源代码 if(isset($_GET["file1"]) && isset($_GET["file2"]))//检查file1和file2参数是否存在 {$file1 $_GET["file1"];$fi…...
Ubuntu24登录PostgreSql数据库的一般方法
命令格式如 psql -U user -d db 或者 sudo psql -U user -d db 修改配置 /etc/postgresql/16/main/postgresql.conf 改成md5,然后重新启动pgsql sudo systemctl restart postgresql...
3.5 Go(特殊函数)
目录 一、匿名函数 1、匿名函数的特点: 2、匿名函数代码示例 2、匿名函数的类型 二、递归函数 1. 递推公式版本 2. 循环改递归 三、嵌套函数 1、嵌套函数用途 2、代码示例 3、作用域 & 变量生存周期 四、闭包 1、闭包使用场景 2、代码示例 五、De…...
设计模式学习(三)
行为模式 职责链模式(Chain of Responsibility Pattern) 定义 它允许多个对象有机会处理请求,从而避免请求的发送者与接收者之间的耦合。职责链模式将这些对象连成一条链,并沿着这条链传递请求,直到有对象处理它为止…...
挑战项目 --- 微服务编程测评系统(在线OJ系统)
一、前言 1.为什么要做项目 面试官要问项目,考察你到底是理论派还是实战派? 1.希望从你的项目中看到你的真实能力和对知识的灵活运用。 2.展示你在面对问题和需求时的思考方式及解决问题的能力。 3.面试官会就你项目提出一些问题,或扩展需求…...
堆(Heap)的原理与C++实现
1. 什么是堆? 堆(Heap)是一种特殊的树形数据结构,通常用于实现优先队列。堆可以分为两种类型: 最大堆(Max Heap):每个节点的值都大于或等于其子节点的值。最小堆(Min H…...
(10) 如何获取 linux 系统上的 TCP 、 UDP 套接字的收发缓存的默认大小,以及代码范例
(1) 先介绍下后面的代码里要用到的基础函数: 以及: (2) 接着给出现代版的 读写 socket 参数的系统函数 : 以及: (3) 给出 一言的 范例代码,获取…...
linux 进程补充
环境变量 基本概念 环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数 如:我们在编写C/C代码的时候,在链接的时候,从来不知道我们的所链接的动态静态库在哪 里,但是照样可以链接成功&#…...
通过docker安装部署deepseek以及python实现
前提条件 Docker 安装:确保你的系统已经安装并正确配置了 Docker。可以通过运行 docker --version 来验证 Docker 是否安装成功。 网络环境:保证设备有稳定的网络连接,以便拉取 Docker 镜像和模型文件。 步骤一:拉取 Ollama Docker 镜像 Ollama 可以帮助我们更方便地管理…...
vim-plug的自动安装与基本使用介绍
vim-plug介绍 Vim-plug 是一个轻量级的 Vim 插件管理器,它允许你轻松地管理 Vim 插件的安装、更新和卸载。相较于其他插件管理器,vim-plug 的优点是简单易用,速度较快,而且支持懒加载插件(即按需加载) 自动…...
Python 自学秘籍:开启编程之旅,人生苦短,我用python。
从2009年,用了几次python后就放弃了,一直用的php,现在人工智能时代,完全没php什么事情。必须搞python了,虽然已经40多岁了。死磕python了。让滔滔陪着你一起学python 吧。 开启新世界 在当今人工智能化的时代ÿ…...
DRGDIP 2.0时代下基于PostgreSQL的成本管理实践与探索(上)
一、引言 1.1 研究背景与意义 在医疗领域的改革进程中, DRG/DIP 2.0 时代,医院成本管理的重要性愈发凸显。新的医保支付方式下,医院的收入不再单纯取决于医疗服务项目的数量,而是与病种的分组、费用标准以及成本控制紧密相关。这…...
swift 专题三 swift 规范一
一、Swift编码命名规范 对类、结构体、枚举和协议等类型的命名应该采用大驼峰法,如 SplitViewController。 文件名采用大驼峰法,如BlockOperation.swift。 对于扩展文件,有时扩展定义在一个独立的文件中,用“原始类型名 扩展名…...
Vue的状态管理:用响应式 API 做简单状态管理、状态管理库(Pinia )
文章目录 引言单向数据流多个组件共享一个共同的状态I 用响应式 API 做简单状态管理使用 reactive()创建一个在多个组件实例间共享的响应式对象使用ref()返回一个全局状态II 状态管理库Pinia枚举状态管理引言 单向数据流 每一个 Vue 组件实例都在“管理”它自己的响应式状态了…...
排序算法--希尔排序
希尔排序是插入排序的改进版本,适合中等规模数据排序,性能优于简单插入排序。 // 希尔排序函数 void shellSort(int arr[], int n) {// 初始间隔(gap)为数组长度的一半,逐步缩小for (int gap n / 2; gap > 0; gap …...
HAL库 Systick定时器 基于STM32F103EZT6 野火霸道,可做参考
目录 1.时钟选择(这里选择高速外部时钟) 编辑 2.调试模式和时基源选择: 3.LED的GPIO配置 这里用板子的红灯PB5 4.工程配置 5.1ms的systick中断实现led闪烁 源码: 6.修改systick的中断频率 7.systick定时原理 SysTick 定时器的工作原理 中断触发机制 HAL_SYSTICK_Co…...
ESXI虚拟机中部署docker会降低服务器性能
在 8 核 16GB 的 ESXi 虚拟机中部署 Docker 的性能影响分析 在 ESXi 虚拟机中运行 Docker 容器时,性能影响主要来自以下几个方面: 虚拟化开销:ESXi 虚拟化层和 Docker 容器化层的叠加。资源竞争:虚拟机与容器之间对 CPU、内存、…...
前端 | JavaScript中的reduce方法
1. 什么是reduce reduce 方法是 JavaScript 中数组的重要方法之一,用于对数组中的元素进行累积计算。它接收一个回调函数作为参数,并返回一个最终计算结果。reduce 在许多场景下都非常有用,比如求和、数组扁平化、对象计数、数据转换等。 2…...