【单片机 C语言】单片机学习过程中常见C库函数(学习笔记)
memset()
C 标准库 - <string.h>
string .h 头文件定义了一个变量类型、一个宏和各种操作字符数组的函数。
<string.h>
是 C 标准库中的一个头文件,提供了一组用于处理字符串和内存块的函数。这些函数涵盖了字符串复制、连接、比较、搜索和内存操作等。
描述
void *memset(void *str, int c, size_t n)
参数 | 说明 |
*str | 指向要填充的内存区域的指针,使用时需要确保 ptr 指向的内存区域足够大,避免发生越界访问 |
c | 要设置的值,通常是一个无符号字符,通常是一个 int 类型的值,但实际上只使用了该值的低8位。这意味着在范围 0 到 255 之外的其他值可能会产生未定义的行为 |
n | 要被设置为该值的字节数,通常是通过 sizeof() 或其他手段计算得到的 |
sizeof()
sizeof() 函数是一个运算符而不是函数,用于计算一个类型或变量所占用的内存字节数。可以用它来获取任何类型的数据的字节数,包括基本数据类型、数组、结构体、共用体等等。
语法形式
sizeof
运算符有两种使用形式:
- 计算数据类型的大小:
sizeof(数据类型)
- 计算变量的大小:
sizeof(变量名)
或者sizeof 变量名
sizeof(int) // 输出 4,即整型变量占用 4 个字节
int x;
sizeof(x) // 输出 4,即整型变量 x 占用 4 个字节char s[] = "Hello, world!";
sizeof(s) // 输出 14,即字符串 s 中有 14 个字符(包括结尾的空字符 '\0')
memset() 函数将指定的值 c 复制到 str 所指向的内存区域的前 n 个字节中,这可以用于将内存块清零'\0' 或设置为特定值。
实例1
#include <stdio.h>
#include <string.h>int main()
{char buffer[100];// 将buffer数组的所有元素初始化为 '\0'memset(buffer, '\0', sizeof(buffer));return 0;
}
实例2
#include <stdio.h> //包含标准输入输出库的头文件,以便使用puts函数进行输出操作
#include <string.h> //包含字符串处理函数的头文件,这里使用的strcpy和memset函数都声明在这个头文件中int main ()
{// 定义一个大小为50的字符数组char str[50];// 使用strcpy函数将字符串复制到str数组中strcpy(str,"This is string.h library function");// 使用puts函数输出字符串puts(str);// 使用memset函数将str数组的前7个字符设置为'$'memset(str,'$',7);// 再次使用puts函数输出修改后的字符串puts(str);return(0);
}
打印结果
This is string.h library function
$$$$$$$ string.h library function
在一些情况下,需要快速初始化大块内存为零或者特定值,memset() 可以提供高效的实现。在清空内存区域或者为内存区域赋值时,memset() 是一个常用的工具函数。
#include <stdio.h>
#include <string.h> int main()
{char buffer[10];// 将 buffer 数组的前5个字节设置为字符 'A',并添加字符串终止符memset(buffer, 'A', 5);buffer[5] = '\0'; // 确保添加字符串终止符printf("Buffer after memset: %s\n", buffer);// 将 buffer 数组清零,使用 '\0' 替代 0memset(buffer, '\0', sizeof(buffer)); // 使用'\0'确保一致性及可读性printf("Buffer after memset: %s\n", buffer);return 0;
}
打印结果
Buffer after memset: AAAAA
Buffer after memset:
注意事项
- 字符串结束标志:使用
%s
输出字符串时,函数会从指定的字符串起始地址开始输出字符,直到遇到字符串结束标志'\0'
才会停止。所以,确保字符串以'\0'
结尾是很重要的,不然可能会输出多余的字符。 - 参数匹配:在使用
%s
时,对应的参数必须是一个指向以'\0'
结尾的字符数组(也就是字符串)的指针。如果参数类型不匹配,可能会导致未定义行为。
strlen()
C 标准库 - <string.h>
描述
C 库函数 size_t strlen(const char *str) 计算字符串 str 的长度,直到空结束字符,但不包括空结束字符。
size_t
是 C 和 C++ 编程语言里的一种数据类型,主要用于表示对象的大小或者数组的长度。
const
是一个类型修饰符,其主要作用是把变量或者对象声明为常量,以此来保证它们的值在程序运行期间不会被修改。
size_t strlen(const char *str)
参数 | 说明 |
*str | 要计算长度的字符串 |
返回值:该函数返回字符串的长度。
实例
#include <stdio.h>
#include <string.h>int main ()
{// 定义一个大小为 50 的字符数组 str,用于存储字符串char str[50];// 定义一个整型变量 len,用于存储字符串的长度int len;// 使用 strcpy 函数将字符串 "This is runoob.com" 复制到字符数组 str 中// strcpy 函数的原型是 char *strcpy(char *dest, const char *src);// 它会把 src 指向的字符串复制到 dest 指向的数组中,并且会复制字符串结束标志 '\0'strcpy(str, "This is runoob.com");// 使用 strlen 函数计算字符数组 str 中字符串的长度// strlen 函数的原型是 size_t strlen(const char *s);// 它会从 s 指向的字符开始,逐个字符计数,直到遇到字符串结束标志 '\0' 为止// 注意,strlen 计算的长度不包括字符串结束标志 '\0'len = strlen(str);// 使用 printf 函数输出字符串及其长度// %s 是格式说明符,用于输出字符串// %d 是格式说明符,用于输出十进制整数printf("|%s| 的长度是 |%d|\n", str, len);// main 函数返回 0,表示程序正常结束return(0);
}
打印结果
|This is runoob.com| 的长度是 |18|
sizeof() 和 strlen()区别:C 语言关于sizeof() 和 strlen()区别 | 菜鸟教程
strstr()
C 标准库 - <string.h>
描述
C 库函数 char *strstr(const char *haystack, const char *needle) 在字符串 haystack 中查找第一次出现字符串 needle 的位置,不包含终止符 \0。
char *strstr(const char *haystack, const char *needle);
参数 | 说明 |
*haystack | 要被搜索的主字符串,即较大的字符串,通常是一个以 '\0' 结尾的字符数组。该参数被声明为 const char * ,表示函数不会修改这个字符串的内容 |
*needle | 要查找的子字符串,同样是一个以 '\0' 结尾的字符数组 |
strstr() 函数用于在字符串 haystack 中查找子字符串 needle 的第一次出现位置。如果找到,则返回指向该位置的指针;如果未找到,则返回 NULL。
返回值
- 如果在
haystack
中找到了needle
子字符串,函数返回一个指向needle
在haystack
中首次出现位置的指针。 - 如果
needle
是空字符串,则返回haystack
本身。 - 如果在
haystack
中没有找到needle
子字符串,则返回NULL
。
实例
#include <stdio.h>
#include <string.h>int main() {// 定义一个指向常量字符的指针 haystack,// 并初始化为一个包含多个字符的字符串,作为被搜索的主字符串const char *haystack = "Hello, World! This is a test.";// 定义一个指向常量字符的指针 needle,// 并初始化为一个较短的字符串,作为要在主字符串中查找的子字符串const char *needle = "World";// 调用 strstr 函数,该函数用于在 haystack 中查找 needle 首次出现的位置// 若找到,返回指向该位置的指针;若未找到,返回 NULL// 将函数返回结果存储在指针变量 result 中char *result = strstr(haystack, needle);// 判断 result 是否不为 NULL,即是否找到了子字符串if (result != NULL) {// 如果找到了子字符串,使用 printf 函数输出信息// 输出子字符串及其在主字符串中首次出现位置开始的后续内容printf("子字符串 '%s' 在主字符串中首次出现的位置是: %s\n", needle, result);} else {// 如果未找到子字符串,使用 printf 函数输出提示信息printf("未找到子字符串 '%s'\n", needle);}// main 函数返回 0,表示程序正常结束return 0;
}
打印结果
子字符串 'World' 在主字符串中首次出现的位置是: World! This is a test.
strcat()
C 标准库 - <string.h>
描述
strcat()
是 C 语言标准库 <string.h>
中的一个函数,其作用是将一个字符串追加到另一个字符串的末尾
char *strcat(char *dest, const char *src);
C 库函数 char *strcat(char *dest, const char *src) 把 src 所指向的字符串追加到 dest 所指向的字符串的结尾。
参数 | 说明 |
*dest | 目标字符串,也就是要被追加内容的字符串。它必须是一个足够大的字符数组,以容纳原字符串和要追加的字符串以及字符串结束符 '\0' |
*src | 源字符串,即要追加到目标字符串末尾的字符串,该字符串不会覆盖目标字符串 |
返回值:函数返回一个指向目标字符串 dest
的指针,方便进行链式调用。
实例
#include <stdio.h>
#include <string.h>int main() {char dest[50] = "Hello, ";const char *src = "World!";// 调用 strcat 函数将 src 追加到 dest 的末尾strcat(dest, src);printf("拼接后的字符串是: %s\n", dest);return 0;
}
工作原理
strcat()
函数会先找到目标字符串 dest
的末尾(即 '\0'
字符的位置),然后将源字符串 src
的内容复制到该位置,包括 src
的字符串结束符 '\0'
。
注意事项
- 目标数组大小:使用
strcat()
时,必须确保目标数组dest
有足够的空间来容纳源字符串src
。如果dest
数组空间不足,会导致缓冲区溢出,这是一个严重的安全问题。 - 字符串结束符:目标字符串
dest
必须以'\0'
结尾,否则strcat()
函数可能无法正确找到字符串的末尾,从而导致未定义行为。
strcpy()
C 标准库 - <string.h>
描述
strcpy()
是 C 语言标准库 <string.h>
中的一个函数,用于将一个字符串复制到另一个字符数组中
char *strcpy(char *dest, const char *src);
作用:把 src 所指向的字符串复制到 dest。
参数 | 说明 |
*dest | 指向用于存储复制内容的目标数组,也就是要将字符串复制到的地方。它必须有足够的空间来容纳源字符串(包含字符串结束符 '\0' ) |
*src | 要复制的字符串,是一个以 '\0' 结尾的字符序列,函数会将其内容复制到目标数组中 |
返回值:函数返回一个指向目标字符数组 dest
的指针,这样设计方便进行链式调用。
实例
#include <stdio.h>
#include <string.h>int main() {char dest[20];const char *src = "Hello, World!";// 调用 strcpy 函数将 src 复制到 deststrcpy(dest, src);printf("复制后的字符串是: %s\n", dest);return 0;
}
工作原理
strcpy()
函数会从源字符串 src
的起始位置开始,逐个字符地将字符复制到目标数组 dest
中,直到遇到源字符串的结束符 '\0'
。复制完成后,结束符 '\0'
也会被复制到目标数组中,以此确保目标数组存储的是一个合法的字符串。
注意事项
- 目标数组大小:使用
strcpy()
时,要保证目标数组dest
有足够的空间来存储源字符串及其结束符。如果dest
数组空间不足,会引发缓冲区溢出问题,这是一种严重的安全隐患。 - 覆盖原有内容:
strcpy()
会覆盖目标数组dest
中原有的内容。如果dest
之前已经存储了数据,复制操作会将其覆盖。
puts()
C 标准库 - <stdio.h>
puts()
是 C 语言标准库 <stdio.h>
中的一个函数,主要用于将字符串输出到标准输出设备(通常是控制台),并在输出结束后自动添加一个换行符
int puts(const char *s);
s
:指向要输出的字符串的指针,该字符串必须以空字符 '\0'
结尾 。
返回值
- 如果输出成功,
puts()
函数返回一个非负整数(通常是一个表示成功输出的正数)。 - 如果输出过程中发生错误,函数返回
EOF
(通常定义为 -1),EOF
是<stdio.h>
中定义的一个宏,用于表示文件结束或输入输出错误。
实例
#include <stdio.h>int main()
{const char *message = "Hello, World!";int result = puts(message);if (result == EOF) {printf("输出过程中发生错误。\n");} else {printf("字符串输出成功。\n");}return 0;
}
工作原理
puts()
函数会从指针 s
所指向的位置开始,逐个字符地输出字符串,直到遇到字符串结束符 '\0'
为止。在输出完字符串后,它会自动在末尾添加一个换行符 '\n'
,这意味着每次调用 puts()
后,下一次的输出会从新的一行开始。
与 printf()
的比较
- 功能差异:
puts()
主要用于输出字符串并自动添加换行符,功能相对单一;而printf()
是一个格式化输出函数,可以根据格式说明符输出不同类型的数据,功能更加灵活和强大。 - 使用场景:如果只需要输出一个字符串并换行,使用
puts()
会更简洁;如果需要对输出进行格式化,例如输出不同类型的数据、控制输出的宽度和精度等,则应该使用printf()
。
atoi()
C 标准库 - <stdlib.h>
描述
int atoi(const char *nptr);
作用:把参数 nptr 所指向的字符串转换为一个整数(类型为 int 型)。
nptr
:这是一个指向要转换的字符串的指针。该字符串可以包含可选的前导空白字符(如空格、制表符等),接着可以是一个可选的正负号(+
或-
),然后是一系列的数字字符。函数会尝试将这样的字符串转换为对应的整数值。
返回值
- 若字符串能够成功转换为整数,
atoi()
函数会返回转换后的整数值。 - 若字符串不能被正确转换,比如字符串中不包含有效的数字字符,函数会返回 0。
实例1
#include <stdio.h>
#include <stdlib.h>int main() {const char *str1 = "12345";const char *str2 = " -678";const char *str3 = "abc123";int num1 = atoi(str1);int num2 = atoi(str2);int num3 = atoi(str3);printf("字符串 '%s' 转换后的整数是: %d\n", str1, num1);printf("字符串 '%s' 转换后的整数是: %d\n", str2, num2);printf("字符串 '%s' 转换后的整数是: %d\n", str3, num3);return 0;
}
打印结果
字符串 '12345' 转换后的整数是: 12345
字符串 ' -678' 转换后的整数是: -678
字符串 'abc123' 转换后的整数是: 0
注意事项
- 溢出问题:
atoi()
函数不会对转换结果进行溢出检查。如果字符串表示的数值超出了int
类型的取值范围,会产生未定义行为。 - 错误处理:
atoi()
函数在遇到无法转换的字符串时只会返回 0,无法明确区分是字符串表示的数值为 0 还是转换失败。
printf()函数
C 标准库 - <stdio.h>
C 库函数 – printf() | 菜鸟教程
printf()规定符
- %d 十进制有符号整数
- %u 十进制无符号整数
- %f 浮点数
- %s 字符串
- %c 单个字符
- %p 指针的值
- %e 指数形式的浮点数
- %x, %X 无符号以十六进制表示的整数
- %o 无符号以八进制表示的整数
- %g 把输出的值按照 %e 或者 %f 类型中输出长度较小的方式输出
- %p 输出地址符
- %lu 32位无符号整数
- %llu 64位无符号整数
- %% 输出百分号字符本身。
上述部分笔记来自C库函数-菜鸟教程
相关文章:
【单片机 C语言】单片机学习过程中常见C库函数(学习笔记)
memset() C 标准库 - <string.h> string .h 头文件定义了一个变量类型、一个宏和各种操作字符数组的函数。 <string.h> 是 C 标准库中的一个头文件,提供了一组用于处理字符串和内存块的函数。这些函数涵盖了字符串复制、连接、比较、搜索和内存操作…...
聚类算法(K-means、DBSCAN)
聚类算法 K-means 算法 算法原理 K-means 是一种基于类内距离最小化的划分式聚类算法,其核心思想是通过迭代优化将数据划分为 K 个簇。目标函数为最小化平方误差(SSE): S S E ∑ i 1 K ∑ x ∈ C i ∣ ∣ x − μ i ∣ ∣ 2…...
Spring AI Alibaba Graph基于 ReAct Agent 的天气预报查询系统
1、在本示例中,我们仅为 Agent 绑定了一个天气查询服务,接收到用户的天气查询服务后,流程会在 AgentNode 和 ToolNode 之间循环执行,直到完成用户指令。示例中判断指令完成的条件(即 ReAct 结束条件)也很简…...
C++初阶——模板
C初阶——模板 一、概念引入 1.如何实现一个通用的交换函数,使它既可以用来交换各种类型的数据呢? 通过前面的学习,我们知道函数重载可以帮我们实现这一功能,代码如下: 运行结果如图: 使用函数重载虽然…...
【技术派后端篇】技术派中基于 Redis 的缓存实践
在互联网应用追求高并发和高可用的背景下,缓存对于提升程序性能至关重要。相较于本地缓存 Guava Cache 和 Caffeine,Redis 具有显著优势。Redis 支持集群和分布式部署,能横向扩展缓存容量和负载能力,适应大型分布式系统的缓存需求…...
系统安装及应用
重点 账号安全控制 系统引导和登陆控制 弱口令检测 端口扫描 前言 随着信息技术的快速发展,系统安全成为我们日常生活和工作中不可或缺的一部分。本章节主要探讨系统安全及应用,涵盖了账号安全控制、系统引导和登录控制、弱口令检测以及端口扫描等多个方面,为我们提供了一…...
发布事件和Insert数据库先后顺序
代码解释 csharp await PublishCreatedAsync(entity).ConfigureAwait(false); await Repository.InsertAsync(entity).ConfigureAwait(false);PublishCreatedAsync(entity):这是一个异步方法,其功能是发布与实体创建相关的事件。此方法或许会通知其他组…...
【英语语法】词法---冠词
目录 冠词一、不定冠词:a / an1. 基本用法2. 主要使用场景3. 特殊情况 二、定冠词:the1. 基本用法2. 主要使用场景3. 特殊情况 三、零冠词1. 基本规则2. 特殊情况 四、冠词对比五、常见错误总结 冠词 冠词是英语中用于限定名词的一类虚词,分…...
android的 framework 有哪些知识点和应用场景
Android Framework 知识点 1. 四大组件 Activity(活动) 是 Android 应用中最基本的组件,用于实现用户界面。一个 Activity 通常对应一个屏幕的内容。有自己的生命周期,包括 onCreate、onStart、onResume、onPause、onStop、onDe…...
Prompt 攻击与防范:大语言模型安全的新挑战
随着大语言模型(LLM)在企业服务、智能助手、搜索增强等领域的广泛应用,围绕其"Prompt"机制的安全问题也逐渐引起关注。其中最具代表性的,就是所谓的 Prompt Injection(提示词注入)攻击。 本文将…...
Ubuntu20.04安装Pangolin遇到的几种报错的解决方案
1.添加两个编译选项 /usr/include/OpenEXR/half.h:121:13: note: because ‘half’ has user-provided ‘half& half::operator(half)’121 | half & operator (half h);| ^~~~~~~~ 解决方案: 在CMakeList中添加以下两句: …...
软考 中级软件设计师 考点知识点笔记总结 day14 关系代数 数据库完整性约束
文章目录 6.5 关系代数6.5.1 关系代数—七种基本运算 6.6 数据库完整性约束6.7 关系型数据库SQL简介 6.5 关系代数 候选码(键):若关系中的某一属性或属性组的值能唯一标识一个元组,则称该属性或属性组为候选码。 主码࿰…...
前端vue监听 -watch
前端vue监听 -watch 前言基本用法监听简单数据属性监听对象属性 高级用法深度监听对象即时触发监听监听计算属性 注意事项 前言 在 Vue.js 里,watch 选项可用于响应式地监听数据的变化,当被监听的数据发生改变时,就会触发相应的回调函数来执…...
Linux之信号
目录 一、预备知识 二、信号的产生 一、键盘产生信号 二、系统调用 三、调用系统命令向进程发信号 kill 四、硬件异常 五、软件条件 三、信号的保存 四、信号的处理 一、预备知识 1.信号!信号量。两者没有任何关系 2.什么是信号? 定义一&…...
微软Edge浏览器字体设置
前言 时间:2025年4月 自2025年4月起,微软Edge浏览器的默认字体被微软从微软雅黑替换成了Noto Sans,如下图。Noto Sans字体与微软雅黑风格差不多,但在4K以下分辨率的显示器上较微软雅黑更模糊,因此低分辨率的显示器建议…...
Java中 关于编译(Compilation)、类加载(Class Loading) 和 运行(Execution)的详细区别解析
以下是Java中 编译(Compilation)、类加载(Class Loading) 和 运行(Execution) 的详细区别解析: 1. 编译(Compilation) 定义 将Java源代码(.java文件&#x…...
[python] set
1.添加元素 在 Python 中,向 set 添加一个元素可以使用 add() 方法。如果添加的元素已经存在于 set 中,add() 不会重复添加(因为 set 具有自动去重的特性)。 方法 1:add(element)(添加单个元素࿰…...
转化率提升47%?亚马逊用户行为预测模型深度解读
在亚马逊运营的战场上,谁能更精准地读懂用户行为,谁就更可能赢得转化率的胜利。近年来,越来越多卖家借助“用户行为预测模型”来优化Listing布局、广告投放策略、甚至库存管理,而这些数据驱动的决策也确确实实地带来了质的提升。 …...
C++计算 n! 中末尾零的数量
* 详细说明* 给定一个整数作为输入。目标是找出该数的阶乘结果中末尾零的数量。 一个数 N 的阶乘是范围 [1, N] 内所有数的乘积。* * 我们知道,只有当一个数是 10 的倍数或者有因数对 (2, 5) 时,才会产生末尾零。 在任何大于 5 的数的阶乘中,…...
大模型中超参数TopK是什么
大模型中的超参数Top-K是文本生成过程中的关键控制参数,主要用于平衡生成结果的确定性与多样性。以下从定义、工作原理、应用场景及与其他参数的协同关系进行详细阐述: 一、Top-K的定义与核心机制 基本定义 Top-K(Top-K Sampling)是一种基于概率采样的文本生成策略。其核心…...
NetApp ONTAP 9 故障磁盘更换操作指南
以前写过一篇7-mode的磁盘更换文档,好几个朋友反馈说命令都没有,都不对。主要原因是客户现在的环境都是ontap 9的cluster-mode环境了,所以很多命令都不一样了。为此,这里专门就ontap 9的cluster-mode写一篇磁盘更换操作指南&#…...
leetcode day 35 01背包问题 416+1049
0-1背包问题 (1)第一种情况:二维dp[i][j]数组 dp[i][j]表示[0,i]的物品放入容量为j背包的最大价值 不放物品i,dp[i][j]dp[i-1][j] 放物品i,dp[i][j]dp[i-1][j-w[i]]v[i] 递推公式为: dp[i][j]dp[i-1][j];//不放 if(w[i]<j)dp…...
MySQL的基本操作
显示所有数据库: SHOW DATABASES; 系统默认数据库: 数据库名用途information_schema存储 MySQL 服务器元数据(如数据库、表、列信息),只读mysql存储用户权限、密码、日志等核心数据(不要随意修改ÿ…...
CSS伪类、clip-path实现三角形、箭头绘制
<template><div :class"$options.name"><div class"triangle-container1"><!-- 伪类三角形:向右 --><div class"triangle-RM"></div><!-- 伪类三角形:向下 --><div class&q…...
基于大模型的腹股沟疝全流程预测与诊疗方案研究报告
目录 一、引言 1.1 研究背景与目的 1.2 研究方法与创新点 二、大模型在腹股沟疝术前评估中的应用 2.1 腹股沟疝概述与诊断方法 2.2 术前评估指标与数据收集 2.3 大模型预测原理与实现 2.4 预测结果与传统评估对比 三、基于大模型预测的手术方案制定 3.1 手术方式选择…...
零基础上手Python数据分析 (20):Seaborn 统计数据可视化 - 轻松绘制精美统计图表!
写在前面 —— 告别 Matplotlib 繁琐定制,拥抱 Seaborn 便捷之美,让统计可视化更高效 在前面两篇博客中,我们学习了 Python 数据可视化的基石 Matplotlib,掌握了绘制基础图表和进行高级定制的技巧。 Matplotlib 功能强大且灵活,能够满足几乎所有的二维绘图需求。 然而,…...
elasticsearch7.15节点磁盘空间满了迁移数据到新磁盘
一.数据安全迁移 在 Elasticsearch 中设置某个节点临时不可用(例如进行维护或升级),可以通过以下步骤安全地操作,避免数据丢失或集群状态异常 1: 排除节点分片分配,触发分片迁移到其他节点 PUT /_cluster/settings {&…...
MCP案例—客户端和服务端
MCP简介 Model Context Protocol (模型上下文协议),简称MCP,MCP是一种协议,用于LLM与外部拓展资源交互的协议。 想了解具体细节可参考作者本篇文章MCP理论指南 准备 本篇文章将带你通过python创建MCP客户端及服务端,并连接到本…...
排序模型(Learning to Rank)
排序模型(Learning to Rank) 要解决的问题 排序模型旨在解决信息检索中的排序优化问题。例如: 搜索引擎中对候选网页的排序推荐系统中物品的展示顺序广告系统中广告位的分配 核心挑战:根据上下文特征,将最相关/最有…...
L1-1、Prompt 是什么?为什么它能“控制 AI”?
*Prompt 入门 L1-1 想象一下,你只需输入一句话,AI 就能自动为你写一篇文案、生成一份报告、甚至规划你的创业计划。这种“对话即编程”的背后魔法,就是 Prompt 的力量。 🔍 一、Prompt 的定义与由来 Prompt(提示词&am…...
RolmOCR重磅开源:基于Qwen2.5-VL,速度提升40%,手写/倾斜文档识别准确率超92%
向大家介绍一款全新的开源OCR模型——RolmOCR!这款由Reducto AI团队基于阿里巴巴强大的Qwen2.5-VL-7B-Instruct视觉语言模型微调而来的利器,不仅在速度和效率上实现了显著提升(据称处理速度相比其前身olmOCR提升了约40%)ÿ…...
系统架构设计(二):基于架构的软件设计方法ABSD
“基于架构的软件设计方法”(Architecture-Based Software Design, ABSD)是一种通过从软件架构层面出发指导详细设计的系统化方法。它旨在桥接架构设计与详细设计之间的鸿沟,确保系统的高层结构能够有效指导后续开发。 ABSD 的核心思想 ABS…...
[langchain教程]langchain03——用langchain构建RAG应用
RAG RAG过程 离线过程: 加载文档将文档按一定条件切割成片段将切割的文本片段转为向量,存入检索引擎(向量库) 在线过程: 用户输入Query,将Query转为向量从向量库检索,获得相似度TopN信息将…...
Android 图片加载框架 Glide 详细介绍
一、简单使用 1、加载图片 导入依赖 implementation("com.github.bumptech.glide:glide:4.16.0")编写代码 private static final String url = "http://cn.bing.com/az/hprichbg/rb/Dongdaemun_ZH-CN10736487148_1920x1080.jpg";btnPic.setOnClickList…...
vue2解析html中的公式,使用vue-katex
文本是markdown格式,需要解析markdown <p v-html"md.render(text)"></p>import MarkdownIt from markdown-it ...const mdRender MarkdownIt(); ...data中md: new MarkdownIt(),现在文本中会出现数学公式,解析使用vue-katex 1.…...
使用Unity Cache Server提高效率
2021年1月20日19:04:28 1 简介 Unity Cache Server,翻译过来就是Unity缓存服务器 1.1 缓存服务器の官方介绍 Unity 有一个完全自动的资源管线。每当修改 .psd 或 .fbx 文件等源资源时,Unity 都会检测到更改并自动将其重新导入。随后,Unity 以内部格式存储从文件导入的数…...
【C++】模板2.0
最近学习了一些模板的知识,速写本博客作为学习笔记,若有兴趣,欢迎垂阅读! 1.非类型模板参数 模板参数分类类型形参与非类型形参。 类型形参即:出现在模板参数列表中,跟在class或者typename之类的参数类型名…...
深入解析 Linux 文件系统中的软硬链接:从原理到实践
引言 在 Linux 系统中,软链接(Symbolic Link) 和 硬链接(Hard Link) 是文件管理的两大核心机制。它们如同文件系统的“快捷方式”与“分身术”,既能节省存储空间,又能实现灵活的文件管理。但两…...
JumpServer多用户VNC桌面配置指南:实现多端口远程访问
在当今的云计算和远程工作环境中,高效且安全地管理多用户远程桌面访问变得越来越重要。本文将详细介绍如何在JumpServer中配置多个VNC桌面,以满足不同用户的远程访问需求。我们将以创建第二个桌面为例,为用户user2配置VNC访问。 一、背景说明 JumpServer作为一款优秀的开源…...
【数据结构入门训练DAY-19】总结数据结构中的栈
文章目录 前言一、栈的思想二、栈的解题思路结语 前言 本次训练内容: 栈的复习。总结栈的基本操作 一、栈的思想 在数据结构中,栈是一种很常见的算法。栈——就像你往桶里放东西似的,要取出桶内的物体就得先把桶顶的物品取出来ÿ…...
MyBatis-Plus 防止 SQL 注入最佳实践指南
🚫 MyBatis-Plus 防止 SQL 注入最佳实践指南 作者:William Dawson 标签:Java、MyBatis-Plus、安全、SQL 注入、防护 💥 什么是 SQL 注入? SQL 注入是一种常见的安全漏洞,攻击者通过恶意构造 SQL 输入参数&…...
AI之pdf解析:Tesseract、PaddleOCR、RapidPaddle(可能为 RapidOCR)和 plumberpdf 的对比分析及使用建议
目录标题 Tesseract、PaddleOCR、RapidPaddle(可能为 RapidOCR)和 plumberpdf 的对比分析1. Tesseract类型: 开源 OCR 引擎特点:缺点:适用场景: 2. PaddleOCR (推荐)类型:特点:缺点:适用场景: 复杂版式文档、多语言混合文本、需要高精度识别的场景&#…...
经典文献阅读之--Kinematic-ICP(动态优化激光雷达与轮式里程计融合)
0. 简介 传统的激光雷达里程计系统通过点云配准来计算移动机器人的自运动(ego-motion),但它们通常没有考虑机器人的运动学特性,这可能导致不准确的运动估计,特别是在机器人不可能发生某些运动(如沿z轴的小…...
【显卡占用】kill程序后,显卡仍被占用
如果 kill 程序执行了,但显卡仍然显示被占用,咋个办? 如图所示,GPU-Util占用为0%,但显示占用48G,且无法再上程序: 执行命令: fuser -v /dev/nvidia* kill pid若上述方法无法解决&am…...
在 macOS 上合并 IntelliJ IDEA 的项目窗口
在使用 IntelliJ IDEA 开发时,可能会打开多个项目窗口,这可能会导致界面变得混乱。为了提高工作效率,可以通过合并项目窗口来简化界面。本文将介绍如何在 macOS 上合并 IntelliJ IDEA 的项目窗口。 操作步骤 打开 IntelliJ IDEA: 启动你的 I…...
IO流--字节流详解
IO流 用于读写数据的(可以读写文件,或网络中的数据) 概述: I指 Input,称为输入流:负责从磁盘或网络上将数据读到内存中去 O指Output,称为输出流,负责写数据出去到网络或磁盘上 因…...
6N60-ASEMI机器人功率器件专用6N60
编辑:ll 6N60-ASEMI机器人功率器件专用6N60 型号:6N60 品牌:ASEMI 封装:TO-220F 批号:最新 最大漏源电流:6A 漏源击穿电压:600V RDS(ON)Max:1.20Ω …...
实现侧边栏点击标题列表,和中间列表区域联动效果
左侧边栏标题列表实现: -------------------html-----------------------<divclass"uav":class"{ hidden: !isVisible, visible: isVisible }"><ul id"toc"><liv-for"(item, index) in HotList":key"…...
基于MuJoCo物理引擎的机器人学习仿真框架robosuite
Robosuite 基于 MuJoCo 物理引擎,能支持多种机器人模型,提供丰富多样的任务场景,像基础的抓取、推物,精细的开门、拧瓶盖等操作。它可灵活配置多种传感器,提供本体、视觉、力 / 触觉等感知数据。因其对强化学习友好&am…...
kafka监控kafka manager(CMAK)部署配置
一、准备工作 1.1、服务器信息梳理 角色IP操作系统安装服务监控机10.45.19.20Linux CentOS 7.9CMAK3.0.0.5、ZooKeeper3.9.0、JDK11、JDK1.8被监控机 Kafka broker.id 050.50.50.101Linux CentOS 7.9Kafka、ZooKeeper(任意版本)被监控机 Kafka broker.…...