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

字符串与相应函数(下)

字符串处理函数分类

  • 求字符串长度:strlen
  • 长度不受限制的字符串函数:strcpy,strcat,strcmp
  • 长度受限制的字符串函数:strncpy,strncat,strncmp
  • 字符串查找:strstr
  • 字符串切割:strtok
  • 错误信息报告:strerror
  • 字符操作,内存操作函数:memcpy,memmove,memset,memcmp

strstr

strstr函数是C标准库中的一个字符串处理函数,用于在一个字符串中查找子字符串的第一次出现位置。strstr函数用于在字符串中查找子字符串的第一次出现位置。如果找到,则返回指向该位置的指针;如果未找到,则返回NULL

strstr函数的特点

strstr函数的模拟实现

#define  _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>
#include<string.h>
#include<assert.h>char* my_strstr(const char* str1, const char* str2)
{assert(str1 && str2);if (str2 == "\0"){return (char*)str1;}const char* s1 = str1;const char* s2 = str2;const char* cp = str1;while (*cp){s1 = cp;s2 = str2;while ((*s1 != '\0') && (*s2 != '\0') && (*s1 == *s2)){s1++;s2++;}if (*s2 == '\0'){return (char*)cp;}cp++;}return NULL;
}int main()
{char arr1[] = "aabbbcdef";char arr2[] = "bbc";char* ret = my_strstr(arr1, arr2);if (ret == NULL){printf("找不到\n");}else{printf("%s\n", ret);}return 0;
}

strstr函数的使用

#define  _CRT_SECURE_NO_WARNINGS 1#include <stdio.h>
#include <string.h>int main()
{char str[] = "This is a simple string";char* pch;pch = strstr(str, "simple");if (pch != NULL)strncpy(pch, "sample", 6);puts(str);return 0;
}

strtok

strtok函数是C标准库中的一个字符串处理函数,它主要用于将输入字符串按照指定的分隔符进行分割,并返回每个子字符串的指针。这个函数非常适合处理各种常见的文本分割任务,如路径分隔、配置文件解析和数据文件处理

strtok函数的特点

字符串破坏:strtok函数会修改原始字符串,将其分割后的部分用\0字符填充,因此原始字符串在分割后会失去原有的形式。

  • 线程安全性:strtok函数不是线程安全的,因为它使用了静态分配的空间来存储被分割的字符串位置。这意味着在多线程环境中使用strtok函数可能会导致不可预测的行为
  • 分隔符的多样性:strtok函数支持多个分隔符,只需在delim中列出所有分隔符即可

strtok函数的使用

 #define  _CRT_SECURE_NO_WARNINGS 1#include <stdio.h>
#include <string.h>int main()
{char arr[] = "198.168.120.50";char* p = ".";char buf[20] = { 0 };strcpy(buf, arr);char* ret = NULL;for (ret = strtok(buf, p);ret != NULL;ret = strtok(NULL, p)){printf("%s\n", ret);}return 0;
}

strerror

strerror函数是C语言中的一个函数,用于将指定的错误码转换为对应的错误信息字符串。

strerror函数的特点

  • strerror函数的头文件:strerror函数定义在errno.h头文件中,因此在使用该函数之前,必须包含这个头文件。
  • strerror函数的返回值 :strerror函数的返回值是一个指向错误消息字符串的指针,这个消息字符串即为出错信息的字符串。如果函数调用成功,返回值是指向错误信息字符串的指针;如果发生错误,则返回一个空指针(NULL)。
  • strerror函数的注意事项 :需要注意的是,strerror函数不是线程安全的,因为在多线程环境中,多个线程可能会同时调用strerror函数并覆盖errno的值。因此,在多线程程序中,建议使用strerror_r函数,它是strerror的线程安全版本。
  • strerror函数的使用场景:strerror函数通常在系统调用或库函数出错时使用。当这些函数返回错误时,会设置errno变量,此时可以使用strerror函数将errno的值转换为人类可读的错误信息,便于调试和日志记录。

strerror函数的使用

#define  _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>
#include<string.h>
#include<errno.h>int main()
{//打开文件FILE* pf = fopen("text.exe", "r");if (pf == NULL){printf("%s\n", strerror(errno));}//读文件//关闭文件fclose(pf);pf = NULL;return 0;
}

输出结果:

在此我们看见我们还需要写一个输出语句,那么我们还可以使用perror函数,可以更加直接明了的发现错误

perror=printf+error

#define  _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>
#include<string.h>
#include<errno.h>int main()
{//打开文件FILE* pf = fopen("text.exe", "r");if (pf == NULL){//printf("%s\n", strerror(errno));perror("fopen");return 1;}//读文件//关闭文件fclose(pf);pf = NULL;return 0;
}

输出结果:

memcpy

memcpy是C语言中的一个标准库函数,用于将源内存区域的内容复制到目标内存区域。

memcpy函数的特点

  • 函数memcpy从source的位置开始向后复制num个字节的数据到destination的内存位置。
  • 这个函数在遇到 '\0' 的时候并不会停下来。
  • 如果source和destination有任何的重叠,复制的结果都是未定义的。

memcpy函数与strcpy函数的区别

1. 复制内容

  • strcpy:专门用于复制字符串,它会一直复制直到遇到源字符串中的 '\0'结束符。
  • memcpy:可以复制任意内容,如字符数组、整型、结构体、类等。它按照指定的字节数进行复制,而不是基于 '\0' 结束符。

2. 函数原型

  • strcpy: char* strcpy(char* dest, const char* src); ,返回指向目标缓冲区 `dest` 的指针。
  • memcpy:void* memcpy(void* dest, const void* src, size_t n); ,其中 n 是要复制的字节数,同样返回指向目标缓冲区 dest 的指针 。

3. 安全性

  • strcpy :由于其不检查目标缓冲区的大小,若源字符串长度超过了目标缓冲区的大小(不包括 '\0' ),就 会发生缓冲区溢出,这是一个常见的安全隐患。例如,目标缓冲区只能容纳 5 个字符,而源字符串有 10 个字符,使用 ` strcpy 就会导致溢出 。
  • memcpy :虽然它提供了复制字节数的选项,但如果指定了错误的字节数或目标缓冲区大小不足,也可能导致问题。不过,由于其提供了明确的字节数,所以相比于 strcpy ,它在某些情况下可能更安全 。

4. 用途

  • strcpy :主要用于字符串的复制。当明确知道要复制的是字符串时,使用 strcpy 较为方便。
  • memcpy :用于复制任意类型的内存块,特别是当需要复制的数据中可能包含 '\0' 字符时(因为 strcpy 在遇到 '\0' 时会停止复制)。例如,复制一个包含图像数据的内存块,就需要使用 memcpy 。

5. 实现方式

  • strcpy :通过逐个字符复制直到遇到 '\0' 结束符来实现字符串的复制。
  • memcpy :通过逐个字节复制来实现内存块的复制,直到达到指定的字节数 `n`。在地址不对齐的情况下,它是一个字节一个字节地拷,地址对齐以后,就会使用 CPU 字长(32bit 或 64bit)来拷,还会根据 CPU 的类型选择一些优化的指令来进行拷贝 [[4]()]。

6. 效率 :在拷贝相同字符串和字节数时,`strcpy` 的效率略高于 `memcpy`。不过 `memcpy` 是一个效率较高的内存拷贝函数,其实现与 CPU 类型、操作系统、cLib 相关。

memcpy函数的使用

#define  _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>
#include<string.h>int main()
{int arr1[] = { 1,2,3,4,5,6,7,8,9,0 };int arr2[10] = { 0 };memcpy(arr2, arr1, 20);int i = 0;for (i = 0;i < 5;i++){printf("%d ", arr2[i]);}return 0;
}

memmove

memmove函数是C语言中用于内存操作的一个重要工具,它主要用于从源内存区域拷贝一定数量的字节到目标内存区域。memmove函数的一个显著特点是它可以处理源内存区域和目标内存区域重叠的情况,这使得它在处理某些特定的内存操作时非常有用

memmove函数的特点

1. 处理内存重叠

Memmove函数的一个显著特点是它可以处理源内存区和目标内存区重叠的情况。这意味着,如果源内存区和目标内存区的部分区域重叠,memmove仍然可以正确地复制字节,而不会像memcpy那样导致数据损坏。

2. 内存操作的安全性

由于memmove能够处理内存重叠,它在进行内存操作时更加安全。当源和目标内存区域重叠时,memmove会从高地址向低地址进行拷贝,以确保数据的正确性和完整性。

3. 返回值

Memmove函数的返回值是指向目标内存区的指针。这一点与memcpy相同。

4. 使用场景

Memmove通常在需要处理内存重叠的情况下使用,例如在字符串操作中移动字符串,或者在数组中移动元素。它的这些特点使得它在C语言编程中成为一个非常有用的工具。

5. 实现细节

虽然memmove的具体实现可能会有所不同,但它的基本思想是使用中间缓冲区的方式来复制数据,从而允许目标和源重叠。这种实现方式确保了数据的安全复制。

memmove函数的使用

#define  _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>
#include<string.h>int main()
{char str[] = "memmove can be very useful......";memmove(str + 20, str + 15, 11);puts(str);return 0;
}

memset

memset函数的作用是将指针变量s所指向的前n字节的内存单元用一个整数c替换。这个函数通常用于新申请的内存做初始化工作,例如将一段内存空间全部设置为某个字符,一般用在对定义的字符串进行初始化为'''/0'.

memset函数的特点

1. 内存空间初始化

memset函数主要用于内存空间的初始化。它可以将一段内存空间全部设置为某个字符,通常用在对定义的字符串进行初始化为''或'\0'。例如,可以使用memset将一个字符数组初始化为空字符串2memset()函数及其作用_cc2530 memset(re,0,20)。

2. 清空结构体变量或数组

memset可以方便地清空一个结构类型的变量或数组。这对于大型数据结构的快速清零非常有用,避免了手动逐个成员清零的繁琐1memset()函数及其作用。

3. 字节级操作

memset函数以字节为单位进行操作,这意味着它可以将指定内存区域的每个字节设置为相同的值。这使得它非常适合用于初始化或清空原始内存块2memset()函数及其作用_cc2530 memset(re,0,20)。

4. 快速操作

对于较大的结构体或数组,memset是进行清零操作的一种最快方法。它的实现通常是优化过的,能够在较短时间内完成大量内存的初始化

memset函数的使用

#define  _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>
#include<string.h>int main()
{char str[] = "haha xixi yesyes nono.";memset(str, '@', 10);puts(str);return 0;
}

输出结果:

memcmp

memcmp 函数是C语言中的一个标准库函数,用于比较两个内存区域的内容。

memcmp函数的特点

  1. 逐字节比较:memcmp函数是按字节比较的,它逐个比较内存区域buf1和buf2的前count个字节。
  2. ASCII码比较:memcmp函数比较的是字节的ASCII码值,而不是字符的实际意义。
  3. 返回值:当buf1小于buf2时,返回值小于0;当buf1等于buf2时,返回值等于0;当buf1大于buf2时,返回值大于0。
  4. 不受字符串结束符影响:与strcmp函数不同,memcmp函数不会受到字符串结束符(如'\0')的影响,它只比较前count个字节。
  5. 适用范围:memcmp函数不仅可以用于比较字符串,还可以用于比较任何类型的内存区域,这使得它在处理二进制数据时非常有用。
  6. 效率:由于memcmp函数不需要寻找字符串结束符,因此在处理大型数据块时,它的效率通常比strcmp函数高。

memcmp函数的使用

#define  _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>
#include<string.h>int main()
{char str1[] = "abgrdsd";char str2[] = "nxcjkdbc";int n = 0;n = memcmp(str1, str2, sizeof(str1));if (n > 0)printf("str1>str2\n");else if(n == 0)printf("str1=str2\n");elseprintf("str1 < str2");return 0;
}

相关文章:

字符串与相应函数(下)

字符串处理函数分类 求字符串长度&#xff1a;strlen长度不受限制的字符串函数&#xff1a;strcpy,strcat,strcmp长度受限制的字符串函数:strncpy,strncat,strncmp字符串查找&#xff1a;strstr字符串切割&#xff1a;strtok错误信息报告&#xff1a;strerror字符操作&#xf…...

驾驭 Linux 云: JavaWeb 项目安全部署

目录 1. 引言 2. Linux 基础指令 2.1 ls 展示目录/文件 2.2 pwd 查看所在路径 2.3 mkdir 创建文件夹 2.4 cd 切换路径 2.5 touch 创建文件 2.6 rm 删除文件 2.6 rm -r/rf 删除文件夹 2.7 rz/sz 上传/下载文件 2.7.1 rz 上传文件 2.7.2 sz 下载文件 2.8 mv 移动文件…...

【MySQL数据库】InnoDB存储引擎:逻辑存储结构、内存架构、磁盘架构

逻辑存储结构 一个数据库是由一张张表组成的&#xff0c;而表中是由一个个段构成的&#xff0c;一个段是由区构成的&#xff0c;区空间是由页构成的&#xff0c;页是行构成的。 ①表空间&#xff1a;.ibd文件&#xff0c;一个mysql实例可以对应多个表空间&#xff0c;用于存储…...

HJ16 购物单

https://www.nowcoder.com/exam/oj/ta?tpId37 HJ16 购物单 描述 王强决定把年终奖用于购物&#xff0c;他把想买的物品分为两类&#xff1a;主件与附件。 主件可以没有附件&#xff0c;至多有 2个附件。附件不再有从属于自己的附件。如果要买归类为附件的物品&#xff0c;必…...

SLAM文献之DM-VIO: Delayed Marginalization Visual-Inertial Odometry

1. 算法概述 DM-VIO (Delayed Marginalization Visual-Inertial Odometry) 是一种基于延迟边缘化的视觉-惯性里程计算法&#xff0c;它结合了视觉和惯性测量单元(IMU)的数据进行位姿估计。该算法是VINS-Mono的改进版本&#xff0c;主要创新点在于采用了一种延迟边缘化策略&…...

【信息安全】黑芝麻A1000芯片安全启动方案

基于黑芝麻A1000芯片的安全启动方案实现指南: 一、安全启动流程架构设计 // 启动阶段状态机定义(基于A1000芯片手册) typedef enum {ROM_BOOT = 0x01, // BootROM验证 SPL_VERIFY = 0x02, // 二级加载器验证 ATF_SIGN_CHECK = 0x03, // ARM Trusted Firmware验证 OS_LOADE…...

初识Redis · list和hash类型

目录 前言&#xff1a; 哈希类型 基本命令 编码方式 应用场景 列表 基本命令 编码方式 应用场景 前言&#xff1a; 前文我们已经介绍了string的基本使用&#xff0c;以及对应的基本命令&#xff0c;最后也是简单的理解了一下string的应用场景&#xff0c;比如计数统计…...

golang-非orm数据库的操作与对比 database/sql、sqlx 和 sqlc

简单介绍 database/sql database/sql 是一个标准库软件包&#xff0c;负责与数据库&#xff08;主要是 SQL 关系数据库&#xff09;的连接和交互。 它为类 SQL 交互提供泛型接口、类型和方法。database/sql 在创建时将简单易用纳入考量&#xff0c;配置为支持与类 SQL 数据库…...

‌DeepSeek模型在非图形智能体的应用中是否需要GPU

答&#xff1a;不一定 概念 1、是否需要GPU与应用是否图形处理应用无关 2、文本内容智能体大多也需要GPU来提供更好的性能 3、‌DeepSeek模型在非图形智能体的应用中是否需要GPU取决于具体的模型版本和部署环境 不需要GPU的模型版本 ‌DeepSeek-R1-1.5B‌&#xff1a; 这…...

RadioMaster POCKET遥控器进入ExpressLRS界面一直显示Loading的问题解决方法

RadioMaster POCKET遥控器进入ExpressLRS界面一直显示Loading的问题解决方法 问题描述解决方法 问题描述 有一天我发现我的 RadioMaster POCKET 遥控器进入 ExpressLRS 设置界面时&#xff0c;界面却一直停留在 “Loading” 状态&#xff0c;完全无法进入设置界面。 我并没有…...

idea的快捷键使用以及相关设置

文章目录 快捷键常用设置 快捷键 快捷键作用ctrlshift/注释选中内容Ctrl /注释一行/** Enter文档注释ALT SHIFT ↑, ALT SHIFT ↓上下移动当前代码Ctrl ALT L格式化代码Ctrl X删除所在行并复制该行Ctrl D复制当前行数据到下一行main/psvm快速生成入口程序soutSystem.o…...

【DDR 内存学习专栏 1.4 -- DDR 的 Bank Group】

文章目录 BankgroupBankgroup 与 Bank 的关系 DDR4 中的 BankgroupDDR4-3200 8Gb芯片为例组织结构访问场景 实际应用示例 Bankgroup Bankgroup是DDR4及后续标准(DDR5)中引入的一个更高层次的组织结构。它将多个Bank组合在一起形成一个Bankgroup&#xff0c;目的是为了进一步提…...

新晋前端框架技术:小程序容器与SuperApp构建

2025年&#xff0c;前端开发领域持续迭代&#xff0c;主流框架如Vue、React等纷纷推出新版本&#xff0c;在性能、开发效率及适用场景上实现突破&#xff0c;进一步巩固其技术地位。 1. Vue 3的全面普及与创新 Vue 3通过多项核心特性优化了开发体验&#xff1a; Teleport组件…...

强化学习:基于价值的方法做的是回归,基于策略的方法做的是分类,可以这么理解吗?

在强化学习领域,基于价值的方法(Value-based Methods)和基于策略的方法(Policy-based Methods)是两种核心范式。本文将从目标函数、优化机制以及与机器学习任务的类比角度,探讨这两种方法是否可以被分别理解为回归和分类任务,并深入分析其内在逻辑。 一、基于价值的方法…...

蓝耘元生代AIDC OS:一站式MaaS平台,助力AI应用快速落地

文章目录 引言1. 什么是MaaS平台&#xff1f;MaaS平台的典型特点 2. 蓝耘元生代AIDC OS 热门模型3. 快速入门&#xff1a;如何调用API&#xff1f;步骤1&#xff1a;注册并获取API Key步骤2&#xff1a;调用API&#xff08;Python示例&#xff09; 4. 与Chatbox搭配使用&#x…...

3.2.2.3 Spring Boot配置拦截器

在Spring Boot应用中配置拦截器&#xff08;Interceptor&#xff09;可以对请求进行预处理和后处理&#xff0c;实现如权限检查、日志记录等功能。通过实现HandlerInterceptor接口并注册到Spring容器&#xff0c;拦截器可以自动应用到匹配的请求路径。案例中&#xff0c;创建了…...

Python----机器学习(基于PyTorch的蘑菇逻辑回归)

Logistic Regression&#xff08;逻辑回归&#xff09;是一种用于处理二分类问题的统计学习方法。它基于线性回归 模型&#xff0c;通过Sigmoid函数将输出映射到[0, 1]范围内&#xff0c;表示概率。逻辑回归常被用于预测某个实 例属于正类别的概率。 一、数据集介绍 本例使用了…...

Python----机器学习(基于PyTorch的乳腺癌逻辑回归)

Logistic Regression&#xff08;逻辑回归&#xff09;是一种用于处理二分类问题的统计学习方法。它基于线性回归 模型&#xff0c;通过Sigmoid函数将输出映射到[0, 1]范围内&#xff0c;表示概率。逻辑回归常被用于预测某个实 例属于正类别的概率。 一、数据集介绍 在本例中&…...

如何配置AWS EKS自动扩展组:实现高效弹性伸缩

本文详细讲解如何在AWS EKS中配置节点组&#xff08;Node Group&#xff09;和Pod的自动扩展&#xff0c;优化资源利用率并保障应用高可用。 一、准备工作 工具安装 安装并配置AWS CLI 安装eksctl&#xff08;EKS管理工具&#xff09; 安装kubectl&#xff08;Kubernetes命令…...

【C++ Qt】认识Qt、Qt 项目搭建流程(图文并茂、通俗易懂)

每日激励&#xff1a;“不设限和自我肯定的心态&#xff1a;I can do all things。 — Stephen Curry” 绪论​&#xff1a; 本章将开启Qt的学习&#xff0c;Qt是一个较为古老但仍然在GUI图形化界面设计中有着举足轻重的地位&#xff0c;因为它适合嵌入式和多种平台而被广泛使用…...

用Python打造去中心化知识产权保护系统:科技驱动创作者权益新方案

用Python打造去中心化知识产权保护系统:科技驱动创作者权益新方案 近年来,区块链技术和去中心化系统的兴起为知识产权保护提供了新的可能性。在传统模式下,知识产权保护通常依赖于集中化管理机构,这种方式不仅成本高,还可能因不透明导致权益争议。于是,我们萌生了一个设…...

CVE重要漏洞复现-Fastjson1.2.24-RCE漏洞

本文仅供网络学习&#xff0c;不得用于非法目的&#xff0c;否则后果自负 1、漏洞简介 fastjson是阿里巴巴的开源JSON解析库&#xff0c;它可以解析JSON格式的字符串&#xff0c;也可以从JSON字符串反序列化到JavaBean。即fastjson的主要功能就是将Java Bean序列化成JSON字符…...

Windows 图形显示驱动开发-WDDM 1.2功能—显示设备硬件软件认证要求

一、容器技术id技术的硬件级实现要求 1.1 EDID规范深度适配 1.物理层要求&#xff1a; 必须使用EDID 2.0及以上版本数据结构 容器ID需写入VSDB区块的0x50-0x6F区域&#xff0c;采用Little-Endian格式存储 允许的最大传输延迟&#xff1a;I2C总线时钟频率≤100KHz时&#xf…...

Coze流搭建--写入飞书多维表格

目标 使用coze搭建一个业务流&#xff0c;将业务流生产出的数据写入飞书保存 测试业务流 使用图片生成插件&#xff0c;配置prompt生产图片&#xff0c;将生产的结果写入飞书文档 coze流 运行后最终效果 搭建流程 第一步&#xff1a;飞书创建多维表格 注册飞书创建多维表…...

4.14:计组第三章

一、数据的强制类型转换与存储 1、边界对齐与大端小端方式 2、真-强制类型转换 二、存储器的基本知识(不包含磁盘存储器) 1、主存储器 (1)...

Vue3+Vite前端项目部署后部分图片资源无法获取、动态路径图片资源报404错误的原因及解决方案

目录 Vue3vite前端项目部署后部分图片资源无法获取、动态路径图片资源报404错误的原因及解决方案 一、情景介绍 1、问题出现的场景 2、无法加载的图片写法 二、反向代理原理简介 三、造成该现象的原因 四、解决方案 1、放弃动态渲染 2、在页面挂载的时候引入图片资源 …...

Nacos操作指南

第一章&#xff1a;Nacos 概述 1.1 什么是 Nacos&#xff1f; 定义与定位 Nacos&#xff08;Naming and Configuration Service&#xff09;是阿里巴巴于2018年开源的动态服务发现、配置管理和服务管理平台&#xff0c;现已成为微服务生态中的重要基础设施。其核心价值在于帮…...

2025年常见渗透测试面试题-红队面试宝典下(题目+回答)

网络安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 目录 一、Java反序列化过程及利用链示例 二、大型网络渗透经验 三、Cobalt Strike的两种Dump Hash区别 四…...

扩增子分析|基于R语言microeco包进行微生物群落网络分析(network网络、Zi-Pi关键物种和subnet子网络图)

一、引言 microeco包是福建农林大学姚敏杰教授团队开发的扩增子测序集成分析。该包综合了扩增子测序下游分析的多种功能包括群落组成、多样性、网络分析、零模型等等。通过简单的几行代码可实现复杂的分析。因此&#xff0c;microeco包发表以来被学界广泛关注&#xff0c;截止2…...

flutter-Text等组件出现双层黄色下划线的问题

文章目录 1. 现象2. 原因3. 解决方法 1. 现象 这天我正在写Flutter项目的页面功能&#xff0c;突然发现我的 Text 文字出现了奇怪的样式&#xff0c;具体如下&#xff1a; 文字下面出现了双层黄色下划线文字的空格变得很大&#xff0c;文字的间距也变得很大 我百思不得其解&a…...

优化运营、降低成本、提高服务质量的智慧物流开源了

智慧物流视频监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒&#xff0c;省去繁琐重复的适配流程&#xff0c;实现芯片、算法、应用的全流程组合&#xff0c;从而大大减少企业级应用约95%的开发成本可通过边缘计算技术…...

leetcode第二题

功能函数 typedef struct ListNode {int val;struct ListNode *next; } ListNode;struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2) {ListNode *dummy (ListNode *)malloc(sizeof(ListNode));ListNode *cur dummy;int carry 0; //carry是进位值…...

QT实现带快捷键的自定义 QComboBox 控件

在现代GUI应用程序中&#xff0c;用户界面的设计不仅要美观&#xff0c;还要提供高效的交互方式。本文将介绍一个自定义的QCComboBox类&#xff0c;它是一个基于Qt的组合框&#xff08;QComboBox&#xff09;&#xff0c;支持为每个下拉项添加快捷键。通过这些快捷键&#xff0…...

聊聊类模板

我们来聊聊类模板&#xff0c;从基础到实际例子&#xff0c;让你更容易理解。 什么是类模板&#xff1f; 类模板是一种模板&#xff0c;允许我们定义一个可以处理任意数据类型的类。简单来说&#xff0c;就是我们可以编写一个类的“蓝图”&#xff0c;然后在需要的时候使用不…...

使用Python进行AI图像生成:从GAN到风格迁移的完整指南

AI图像生成是一个非常有趣且前沿的领域&#xff0c;结合了深度学习和计算机视觉技术。以下是一些使用Python和相关库进行AI图像生成的创意和实现思路&#xff1a; 1. 使用GAN&#xff08;生成对抗网络&#xff09; 基本概念&#xff1a;GAN由两个神经网络组成&#xff1a;生成…...

Java 设计模式:外观模式详解

Java 设计模式&#xff1a;外观模式详解 外观模式&#xff08;Facade Pattern&#xff09;是一种结构型设计模式&#xff0c;它为复杂的子系统提供一个简化的统一接口&#xff0c;隐藏子系统的复杂性&#xff0c;使客户端更方便地使用系统。外观模式就像一个“门面”&#xff…...

微信小程序中实现某个样式值setData改变时从350rpx到200rpx的平滑过渡效果

方案一&#xff1a;使用 CSS Transition&#xff08;推荐简单场景&#xff09; WXSS /* 在对应组件的WXSS中添加 */ .transition-effect {transition: all 0.4s ease-in-out;will-change: bottom; /* 启用GPU加速 */ }WXML <!-- 修改后的WXML --> <view class"…...

LINUX基础 [四] - Linux工具

目录 软件包管理器yum Linux开发工具vim vim的基本概念 vim的三种常用模式 vim的简单配置 vim常用模式的基本操作 命令模式 底行模式 处理vim打开文件报错的问题 Linux编译器-gcc/g使用 为什么我们可以用C/C做开发呢&#xff1f; 预处理&#xff08;进行宏替换&#x…...

Spring Cloud之远程调用OpenFeign最佳实践

目录 OpenFeign最佳实践 问题引入 Feign 继承方式 创建Module 引入依赖 编写接口 打Jar包 服务提供方 服务消费方 启动服务并访问 Feign 抽取方式 创建Module 引入依赖 编写接口 打Jar包 服务消费方 启动服务并访问 服务部署 修改pom.xml文件 观察Nacos控制…...

【QT】 常用控件【输入类】

&#x1f308; 个人主页&#xff1a;Zfox_ &#x1f525; 系列专栏&#xff1a;Qt 目录 一&#xff1a;&#x1f525; 输入类控件 &#x1f98b; Line Edit -- 单行输入框&#x1f380; 录入个人信息&#x1f380; 正则表达式验证输入框数据&#x1f380; 验证两次输入密码一致…...

【Python】读取xyz坐标文件输出csv文件

Python读取xyz坐标文件输出csv文件 import sys import numpy as np import pandas as pd from tqdm import tqdm import cv2 import argparsedef read_xyz(file_path):with open(file_path, "r") as f: # 打开文件data f.readlines() # 读取文件datas []for …...

深度解析Redis过期字段清理机制:从源码到集群化实践 (一)

深度解析Redis过期字段清理机制&#xff1a;从源码到集群化实践 一、问题本质与架构设计 1.1 过期数据管理的核心挑战 Redis连接池时序图技术方案 ​​设计规范&#xff1a;​ #mermaid-svg-Yr9fBwszePgHNnEQ {font-family:"trebuchet ms",verdana,arial,sans-se…...

MapReduce实验:分析和编写WordCount程序(对文本进行查重)

实验环境&#xff1a;已经部署好的Hadoop环境 Hadoop安装、配置与管理_centos hadoop安装-CSDN博客 实验目的&#xff1a;对输入文件统计单词频率 实验过程&#xff1a; 1、准备文件 test.txt文件&#xff0c;它是你需要准备的原始数据文件&#xff0c;存放在你的 Linux 系…...

【中大厂面试题】腾讯云 java 后端 最新面试题

腾讯云&#xff08;一面&#xff09; 1. spring 和 springboot的区别是什么&#xff1f; 配置方式的区别&#xff1a;Spring 应用的配置较为繁琐&#xff0c;通常需要编写大量的 XML 配置文件或者使用 Java 注解进行配置。例如&#xff0c;配置数据源、事务管理器等都需要手动…...

Redis存储“大数据对象”的常用策略及StackOverflowError错误解决方案

Hi&#xff0c;大家好&#xff0c;我是灰小猿&#xff01; 在一些功能的开发中&#xff0c;我们一般会有一些场景需要将得到的数据先暂时的存储起来&#xff0c;以便后面的接口或业务使用&#xff0c;这种场景我们一般常用的场景就是将数据暂时存储在缓存中&#xff0c;之后再…...

【Vue】v-if和v-show的区别

个人博客&#xff1a;haichenyi.com。感谢关注 一. 目录 一–目录二–核心区别三–使用场景​四–性能对比五–总结​ 二. 核心区别 之前将css的显示隐藏的方式的时候&#xff0c;就已经提到过v-show和v-if了。忘记了的可以再回头去复习复习。 &#xff08;2.1&#xff09…...

南瓜颜色预测:逻辑回归在农业分类问题中的实战应用

南瓜颜色预测&#xff1a;逻辑回归在农业分类问题中的实战应用 摘要 本案例通过预测南瓜颜色的分类问题&#xff0c;全面展示了逻辑回归在农业领域的实战应用。从数据预处理到模型评估&#xff0c;详细介绍了Seaborn可视化、模型构建、性能优化和结果解释等关键环节。案例不仅…...

【物联网-RS-485】

物联网-RS-485 ■ RS-485 连接方式■ RS-485 半双工通讯■ RS-485 的特点■ ModBus■ ModBus-ASCII■ ModBus-RTU ■ RS-485 连接方式 ■ RS-485 半双工通讯 一线定义为A 一线定义为B RS-485传输方式&#xff1a;半双工通信、&#xff08;逻辑1&#xff1a;2V ~ 6V 逻辑0&…...

TDengine 语言连接器(Node.js)

简介 tdengine/websocket 是 TDengine 的官方 Node.js 语言连接器。Node.js 开发人员可以通过它开发存取 TDengine 数据库的应用软件。 Node.js 连接器源码托管在 GitHub。 Node.js 版本兼容性 支持 Node.js 14 及以上版本。 支持的平台 支持所有能运行 Node.js 的平台。 …...

Git分布式版本控制工具

一、工作流程 二、常用指令 1、配置git 配置环境变量 cmd打开命令行&#xff0c;输入git查看是否配置成功。 设置用户名和邮箱 git config --global user.name "用户名" git config --global user.email "邮箱" 查看用户名和邮箱 git config --glob…...