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

C语言的字符串偏移小记

通过C的指针,我们可以遍历一个很长的字符串。我们针对这个字符串可以按照字符串里面的终止符做切分。

首先我们来看下面的一段代码:

#include <stdio.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>const char *t = (char *)"hello\0wkkkorld\0heheheheeh\0";int main() {int length = 23;char *p = t;printf("length : %d\n", length);size_t f = strnlen(t,10);printf("f:%d\n",f);p += f+1;size_t g = strnlen(p,10);printf("g:%d\n",g);
}

这段代码的输出为:

length : 23
f:5
g:8

下面来简要说一下这个过程:
首先,一开始我们初始化了一个字符串指针t

const char *t = (char *)"hello\0wkkkorld\0heheheheeh\0";

这个t就是指向这个字符串的起始地址。
然后,定义了一个指针p指向t指向的地址。此时,p也是指向这个字符串的起始地址。

strnlen函数解析

strlen会便利给定的字符串,在遇到第一个’\0’的时候结束,并返回这个字符串长度的大小。
那上面的例子来说,`strnlen(t,10);``返回的是5,也就是说在第一个字符串里面,找到第一个结束符的时候的字符串是5.
此时我们可以认为第一个字符串的大小是t[5]。

后面的10意思是在给定10个字符的长度内,寻找第一个子串的长度。

继续, p += f+1。执行到这条指令的时候,前面知道了f是5,此时p调整偏移到5+1的位置,也就是w上。
从w开始,使用strnlen。此时相当于忽略了hello\0了。那么这个时候开始就是wkkkorld,也就是字符串的长度为8.

有什么作用?

结合这个函数的特性,我们可以在已经知道一个字符串的长度的前提下,把里面每一个通过\0切分的字符串都找出来。

最佳实践

我们通过readelf可以从一个ko文件里面的.modinfosection给读出来。
读出来的.modinfo这个section的Elf_Data类型的sec->d_buf其实就是一个以\0为分割符的字符串。

通过strnlen,我们可以遍历其中的每一个字符串,找出“vermagic=”开头的字符串,从而可以找到这个ko的vermagic

相关文章:

C语言的字符串偏移小记

通过C的指针&#xff0c;我们可以遍历一个很长的字符串。我们针对这个字符串可以按照字符串里面的终止符做切分。 首先我们来看下面的一段代码&#xff1a; #include <stdio.h> #include <stdlib.h> #include <stdio.h> #include <string.h>const ch…...

Python学习心得正则表达式及re模块的使用

一、正则表达式定义以及正则表达式的构成&#xff1a; 1.什么式正则表达式&#xff1a; 正则表达式&#xff1a;是一个比较特殊的字符序列&#xff0c;能够帮助用户检查一个字符串是否符合某种特殊的模式。 2.正则表达式的构成&#xff1a; 正则表达式是由元字符和限定字符…...

Oracle启动与关闭(基础操作)

11g读取参数文件的顺序 9i之前&#xff0c;只有静态参数文件pfile文件。 9i开始&#xff0c;引入了动态参数文件spfile文件。 Windows&#xff1a; %ORACLE_HOME%\database SPFILEORCL就是动态参数文件 Linux&#xff1a; $ORACLE_HOME/dbs 11g中&#xff0c;启动数据库。…...

第二月:学习 NumPy、Pandas 和 Matplotlib 是数据分析和科学计算的基础

以下是一个为期 **1 个月&#xff08;30 天&#xff09;**的详细学习计划&#xff0c;精确到每天的学习内容和练习作业&#xff0c;帮助你系统地掌握 NumPy、Pandas 和 Matplotlib 的核心功能。 第 1 周&#xff1a;NumPy 基础 Day 1&#xff1a;NumPy 简介与数组创建 学习内…...

AI 语言模型发展史:统计方法、RNN 与 Transformer 的技术演进

引言 自然语言处理&#xff08;NLP&#xff09;是 AI 领域的重要分支&#xff0c;而语言模型&#xff08;Language Model, LM&#xff09;是 NLP 的核心技术。语言模型经历了从 统计方法 到 RNN&#xff08;循环神经网络&#xff09;&#xff0c;再到 Transformer 的演进&…...

新版电脑通过wepe安装系统

官方下载链接 WIN10下载 WIN11下载 微PE 启动盘制作 1&#xff1a;选择启动盘的设备 2&#xff1a;选择对应的U盘设备&#xff0c;点击安装就可以&#xff0c;建议大于8g 3&#xff1a;在上方链接下载需要安装的程序包&#xff0c;放入启动盘&#xff0c;按需 更新系统 …...

Jmeter断言、关联、录制脚本

Jmeter断言 断言&#xff1a;让程序自动判断预期结果和实际结果是否一致 提示: Jmeter在请求的返回层面有个自动判断机制&#xff08;响应状态码 2xx:成功&#xff0c;4xx/5xx:失败&#xff09;但是请求成功了&#xff0c;并不代表结果一定正确&#xff0c;因此需要检测机制提…...

29、深度学习-自学之路-深入理解-NLP自然语言处理-做一个完形填空,让机器学习更多的内容程序展示

import sys,random,math from collections import Counter import numpy as npnp.random.seed(1) random.seed(1) f open(reviews.txt) raw_reviews f.readlines() f.close()tokens list(map(lambda x:(x.split(" ")),raw_reviews))#wordcnt Counter() 这行代码的…...

SpringBoot速成(12)文章分类P15-P20

1.新增文章分类 1.Postman登录不上&#xff0c;可以从头registe->login一个新的成员:注意&#xff0c;跳转多个url时&#xff0c;post/get/patch记得修改成controller类中对应方法上写的 2.postman运行成功&#xff1a; 但表中不更新&#xff1a;细节有问题&#xff1a; c是…...

RedHat8安装postgresql15和 postgis3.4.4记录及遇到的问题总结

安装包对照版本参考 UsersWikiPostgreSQLPostGIS – PostGIS 如果Red Hat系统上有旧版本的PostgreSQL需要卸载 在较新的Red Hat版本&#xff0c;使用dnf包管理器卸载&#xff1a;sudo dnf remove postgresql-server postgresql 旧版本&#xff0c;使用yum包管理器卸载 sudo y…...

深入解析计算机网络请求头:常见类型与安全性影响

目录 1. Host 2. User-Agent 3. Cookie 4. Referer&#xff08;或 Referrer&#xff09; 5. Authorization 6. Content-Type 7. Content-Length 8. Origin 9. X-Forwarded-For (XFF) 10. Upgrade-Insecure-Requests 11. X-Frame-Options 12. Cache-Control 13. Ac…...

VisoMaster整合包及汉化

VisoMaster是个图片及视频换脸工具&#xff0c;速度快&#xff0c;性能十分强大。 VisoMaster安装有2种方式&#xff0c;根据官网指引安装也十分简单&#xff0c;在此就不重复&#xff0c;只说说安装过程中要注意的事项&#xff1a; 1、自动安装&#xff1a;需要在网络十分畅…...

从安装软件到flask框架搭建可视化大屏(二)——创建一个flask页面,搭建可视化大屏,零基础也可以学会

附录&#xff1a;所有文件的完整代码 models.py # models/models.py from flask_sqlalchemy import SQLAlchemydb SQLAlchemy()class User(db.Model):__tablename__ user # 显式指定表名为 userid db.Column(db.Integer, primary_keyTrue)username db.Column(db.String(…...

【mybatis】基本操作:详解Spring通过注解和XML的方式来操作mybatis

mybatis 的常用配置 配置数据库连接 #驱动类名称 spring.datasource.driver-class-namecom.mysql.cj.jdbc.Driver #数据库连接的url spring.datasource.urljdbc:mysql://127.0.0.1:3306/mybatis_test characterEncodingutf8&useSSLfalse #连接数据库的名 spring.datasourc…...

[JVM篇]垃圾回收器

垃圾回收器 Serial Seral Old PartNew CMS(Concurrent Mark Sweep) Parallel Scavenge Parallel Old G1 ZGC...

DeepSeek专题:DeepSeek-V1核心知识点速览

AIGCmagic社区知识星球是国内首个以AIGC全栈技术与商业变现为主线的学习交流平台&#xff0c;涉及AI绘画、AI视频、大模型、AI多模态、数字人以及全行业AIGC赋能等100应用方向。星球内部包含海量学习资源、专业问答、前沿资讯、内推招聘、AI课程、AIGC模型、AIGC数据集和源码等…...

Ubuntu24.04更新国内源

24.04 源文件地址 已经更换为 /etc/apt/sources.list.d/ubuntu.sources sudo vim /etc/apt/sources.list.d/ubuntu.sources把内容替换为 # 阿里云 Types: deb URIs: http://mirrors.aliyun.com/ubuntu/ Suites: noble noble-updates noble-security Components: main restric…...

是时候说再见了

说再见 2018 to 2025 2018&#xff1a;学习 2018年开始读研。师兄师姐们说可以写写CSDN博客&#xff0c;对找工作也有帮助。于是在12月4日&#xff0c;发布了自己的第一篇文章[翻译] 神经网络与深度学习 首页 - Index。当时还在学习各种基础知识&#xff0c;看到了这个英文文…...

SpringBoot+shardingsphere实现按月分表功能

SpringBootshardingsphere实现按月分表功能 文章目录 前言 ShardingSphere 是一套开源的分布式数据库中间件解决方案&#xff0c;旨在简化数据库分片、读写分离、分布式事务等复杂场景的管理。它由 Apache 软件基金会支持&#xff0c;广泛应用于需要处理大规模数据的系统中 一…...

表情识别任务的复现 for 毕设

前言 为了带师弟做毕设&#xff0c;我们复现了表情识别任务。该文章仅用于记录 首先&#xff0c;感谢复现过程中所参考的分享&#xff1a; 【Bilibili】基于卷积神经网络实现的面部表情识别&#xff08;pytorch&#xff09;【Github】 facial-expression-recognition【Blog】…...

教程 | 从零部署到业务融合:DeepSeek R1 私有化部署实战指南

文章目录 1. 什么是 DeepSeek R1&#xff1f;a. 主要介绍a. 版本区别 2. 部署资源要求a. 硬件资源要求 3. 本地安装DeepSeek-R1a. 为什么选择本地部署&#xff1f;b. 部署工具对比c. 演示环境配置d. Ollama安装流程 4. 可视化工具a. 工具对比b. Open-WebUI部署 5. AI API应用a.…...

分布式 NewSQL 数据库(TiDB)

TiDB 是一个分布式 NewSQL 数据库。它支持水平弹性扩展、ACID 事务、标准 SQL、MySQL 语法和 MySQL 协议&#xff0c;具有数据强一致的高可用特性&#xff0c;是一个不仅适合 OLTP 场景还适合 OLAP 场景的混合数据库。 TiDB是 PingCAP公司自主设计、研发的开源分布式关系型数据…...

密码管理 - 使用BitWarden/VaultWarden自托管密码服务 - 折腾记录

密码管理 - 使用Bitwarden/Vaultwarden自托管密码服务 - 折腾记录 前言 某天(大约两周前了至少 一直没找到机会记录)逛Github发现了开源的密码管理服务Bitwarden&#xff0c;能自托管、能加密、多端适配。 这&#xff0c;&#xff0c;不是让人如获至宝吗。于是就开始折腾了。…...

C语言-章节 1:变量与数据类型 ——「未初始化的诅咒」

在那神秘且广袤无垠的「比特大陆」上&#xff0c;阳光奋力地穿过「内存森林」中错综复杂的代码枝叶缝隙&#xff0c;洒下一片片斑驳陆离、如梦似幻的光影。林间的空气里&#xff0c;弥漫着一股浓郁的十六进制锈蚀味&#xff0c;仿佛在诉说着这片森林中隐藏的古老秘密。 一位零基…...

机器视觉--Halcon If语句

引言 在机器视觉领域&#xff0c;Halcon 是一款功能强大且广泛应用的软件。在使用 Halcon 进行编程时&#xff0c;条件判断是不可或缺的一部分&#xff0c;而IF语句就是实现条件判断的核心工具之一。通过IF语句&#xff0c;我们能够根据不同的条件执行不同的代码块&#xff0c…...

Linux基础之文件权限的八进制表示法

1. Linux 文件权限概述 在 Linux 中&#xff0c;每个文件或目录都有三种基本权限&#xff0c;分别是&#xff1a; 读权限 - r&#xff1a;允许查看文件内容。写权限 - w&#xff1a;允许修改文件内容。执行权限 - x&#xff1a;允许执行文件或进入目录。 每个文件或目录的权…...

HTML的入门

一、HTML HTML&#xff08;HyperText Markup Language&#xff0c;超文本标记语言&#xff09;是一种用来告知浏览器如何组织页面的标记语言。 超文本&#xff1a;就是超越了文本&#xff1b;HTML不仅仅可以用来显示文本(字符串、数字之类)&#xff0c;还可以显示视频、音频等…...

Vue2/Vue3生命周期对比

Vue2的生命周期钩子 beforeCreate 在实例初始化之后&#xff0c;数据观测&#xff08;data&#xff09;和事件配置之前调用。此时无法访问 data、methods 等。 created 在实例创建完成后调用。此时可以访问 data、methods&#xff0c;但 DOM 还未生成。 beforeMount 在挂载…...

闭源大语言模型的怎么增强:提示工程 检索增强生成 智能体

闭源大语言模型的怎么增强 提示工程 检索增强生成 智能体 核心原理 提示工程:通过设计和优化提示词,引导大语言模型进行上下文学习和分解式思考,激发模型自身的思维和推理能力,使模型更好地理解和生成文本,增强其泛用性和解决问题的能力。检索增强生成:结合检索的准确…...

【图像加密解密】空间混沌序列的图像加密解密算法复现(含相关性检验)【Matlab完整源码 2期】

1、说明 本文给出详细完整代码、完整的实验报告和PPT。 环境&#xff1a;MATLAB2019a 复现文献&#xff1a;[1]孙福艳,吕宗旺.Digital image encryption with chaotic map lattices[J].Chinese Physics B,2011,20(04):136-142. 2、部分报告内容 3 部分源码与运行步骤 3.1 部…...