[C语言笔记]10、字符串
前言:
C语言的相关知识点的笔记均在下面的专栏链接中,欢迎订阅!
c语言笔记_1zero10的博客-CSDN博客
10-1字符数组与字符串
1、字符数组就是一个数组,数组的每一个元素都是一个字符
首先利用字符数组,回顾以前学过的数组的相关知识点
2、字符串就是一种特殊的字符数组,这种字符数组的最后一个元素是'\0',结束符
上面这种字符串的定义与初始化的方式是最本质的
占位符%s的含义就是,从第0个元素开始读取字符数组,直至遇到结束符'\0'
一般我们常用的字符串的定义方法是下面这种
用双引号把要输出的字符串括起来,
注意编译器遇到这种字符串的定义方法会自动转换成上面的第一种方法,也就是最后一个字符为结束符'\0'的字符数组的形式
wd后面的中括号内表示后面字符串内容的长度 可以不写,但是如果要写,就要考虑最后一个字符是'\0',也就是连上world这五个字符,一共有6个字符 那么中括号内的数字必须大于等于6
3、修改字符串的内容
如果我想把字符串中的world的字符'o'修改成字符'0'怎么办?如下
4、利用指针定义字符串
与利用字符数组定义字符串(也就是上面1,2,3点所用的方法)不同
利用指针定义字符串会把字符串放在内存的只读常量区,也就是无法对所定义的字符串进行修改
具体格式如下:
你会发现确实利用指针定义的字符串,字符串的内容无法修改,我们想把上面hhh指针的第1个元素修改成了字符'0'
结果我们运行后,发现编译器运行了半天什么也没有输出出来,并且下面的返回值非0,可见这种操作是错误的
那么利用指针定义字符串,把字符串放在内存里的只读常量区有什么作用呢?
就是当再用指针定义一个字符串时,它就会去只读常量区去找,看看是否曾经出现过类似的字符串,如果有就不用重新创建了,用原来的那个字符串就行,即进行复用 如何证明这件事呢?
先定义一个与hhh指针定义的字符串一样的字符串
然后打印hhh和hhh1的地址
我们发现是一个地址 那么其实hhh1定义的字符串并没有存在内存里,而是直接调用hhh定义过的字符串了
10-2字符串输入
下面是一般的字符串输入的方法:
为什么scanf后面括号内的str前面没有取地址符?
因为str是一个数组名,数组名本身的含义就是数组首元素的地址,既然str本身就是一个地址,自然不需要前面加取地址符了
那么我们如果用指针定义一个字符串 可以进行正确的输入输出吗
显然不行,因为利用指针定义的字符串是存储在只读常量区的 一开始我们初始化指针str=NULL,即空指针,但是人为从键盘上输入本质上就是对内存中的数据进行存储和修改,显然这样在只读常量区是不被允许的,因此会报错
下面我们回顾并且解决一下 字符串输入时,输入空格不显示空格后面的内容的问题
你看利用scanf进行字符串的输入时,如果人为输入空格,空格后面的字符串内容不显示
原因是scanf在输入字符串时,是以空格和换行符作为结束标志的,所以当你输入空格后,默认结束,后面的输入内容就不读取了
那我就想要输入有带空格的字符串怎么办?
我们之前在第四章已经讲过,现在回顾一下
法1:用fgets函数(推荐,更安全)
法2 用gets_s函数
10-3字符串输出
本节介绍三种字符串的输出方法
法1:利用printf 占位符是%s\n
法2:利用puts函数 传的参数是字符串名(即字符数组名 也就是字符数组的首元素的地址)
法3:利用指针对字符数组进行遍历
此法更加具有普适性,因为我可以利用while循环对字符串进行任何操作,包括大小写转化呀之类的,不只是仅仅局限于简单的打印输出
下面我们用几节的时间讲解一下字符串中常用的函数
10-4-1strlen 函数
strlen用于获取字符串长度 传的参数是字符串的名字
具体格式如下
注意!strlen 函数返回的是 size_t 类型,而 size_t 是一个无符号整数类型,通常用于表示数组的大小或字符串的长度。当你将 size_t 类型的值赋给 int 类型的变量时,可能会导致数据丢失,特别是在 size_t 的值大于 int 类型的最大值时。
因此需要在strlen函数的前面加上(int),强制转换strlen的返回值数据类型,然后再赋值给a,b,c
上图是利用for循环,参照a的值设置遍历的次数 也就是为了证明使用a真的获取了字符串str1的长度
经过遍历输出验证,strlen函数可以获取字符串的长度
10-4-2strcat 函数
strcat 是字符串拼接函数 str=string 字符串的意思 cat=concat 拼接连接
具体的格式如下:注意包含头文件string.h 并且记得strcat的两个参数传进去后,是把后面那一个拼接到前面那一个的后面
str1没有被修改 而str2的后面被拼接上了整个字符串str1的内容
我们如果把str1拼接到str3后面,发现不行,因为str3是指针定义的在只读常量区的字符串,无法被修改
你看代码返回值非0,说明报错了
拼接要注意字符串的中括号内的长度 不能超过这个长度
10-4-3strcpy 函数
strcpy函数用于字符串的拷贝
str=string 字符串的意思 cpy=copy 拷贝的意思
上面是正常拷贝的情况 也就是strcpy的参数1的长度大于等于参数2字符串长度 并且str3的内容还比str2的内容多
把str3的内容拷贝给str2,你会发现str2的内容和str3的内容完全相同了
下面是异常拷贝的情况
所以使用strcopy时注意,传参时:第一个字符串的长度必须要大于等于第二个字符串的长度,这样才能够保证第二个字符串拷贝过去的内容能够被第一个字符串存起来,而避免存不下的情况
下面我们来介绍一种比较奇怪的拷贝,本质上和正常拷贝是一样的,只是利用这个特殊情况介绍一下拷贝的原理
实际做题过程中不用管这两种拷贝的区别
在满足 传参时:第一个字符串的长度大于等于第二个字符串的长度的前提下
第二个字符串的内容少于第一个字符串 那么此时会发什么
你会发现str1是123
str2也变成了123
str2原来是abcdef
这中间到底发生了什么 我们通过遍历新的str2字符串来看看情况
1,2,3和'\0'都从str1拷贝过来到str2这边了,原先str2前面的abcd分别被1,2,3和'\0'替换,后面的e,f虽然没被替换,但是前面有'\0'结束符,表示整个字符串已经结束,'\0'后面的内容显示不出来,因为\0后面的内容属于字符串
长度之外的内存,本身就不允许访问,也就没办法读取了
字符串拷贝的原理就是把第二个参数所代表的字符串所有内容(包括'\0')逐个赋值给第一个参数所代表的字符串
然后再打印输出时,新的这个经过拷贝重新得到的字符串的结束符'\0'后面的内容不显示
10-4-4strcmp函数
strcmp是字符串比较函数
str=string字符串的意思 cmp=compare 比较的意思
语法就是把需要比较的两个字符串传进strcmp函数里面去
如果两个字符串的内容完全相等 则函数strcmp的返回值为0
如果两个字符串的内容不完全相同怎么比较,返回值又是什么?
相关文章:
[C语言笔记]10、字符串
前言: C语言的相关知识点的笔记均在下面的专栏链接中,欢迎订阅! c语言笔记_1zero10的博客-CSDN博客 10-1字符数组与字符串 1、字符数组就是一个数组,数组的每一个元素都是一个字符 首先利用字符数组,回顾以前学过…...
Windows系统备份和还原点
一、简介 系统的还原点存储了当前系统的主要状态,包括一些关键的配置信息和参数(包括注册表、系统服务设置、设备驱动程序设置等)。将此时的状态进行备份,在系统发生故障时,可以还原到此还原点的状态中,这…...
内联汇编知识点earlyclobber=
arm64内联汇编格式: asm volatile ("汇编指令1\n\t""汇编指令2\n\t""汇编指令3": 输出操作数列表: 输入操作数列表: 可能被修改的寄存器列表 );示例1:简单的寄存器操作 uint64_t add_numbers(uint64_t a, uint64_t b) {…...
修改ESP32CAM的示例CameraWebServer里的camera_index.h的方法
在这里,默认你已经会使用Arduino IDE或者PlatformIO通过烧录底座对ESP32CAM(如下图)进行烧录,并能通过浏览器对其进行访问。 我们访问到下图的界面时,不禁有个疑问,这个界面是如何生成的,如果我…...
Python学习笔记(二)(字符串)
文章目录 编写简单的程序一、标识符 (Identifiers)及关键字命名规则:命名惯例:关键字 二、变量与赋值 (Variables & Assignment)变量定义:多重赋值:变量交换:(很方便哟) 三、输入与输出 (In…...
ViewModel vs AndroidViewModel:核心区别与使用场景详解
在 Android 的 MVVM 架构中,ViewModel 和 AndroidViewModel 都是用于管理 UI 相关数据的组件,但二者有一些关键区别: 1. ViewModel 基本用途:用于存储和管理与 UI 相关的数据,生命周期与 Activity/Fragment 解耦&…...
Windows环境下 全屏显示某个字符串
case WM_PAINT: {PAINTSTRUCT ps;HDC hdc BeginPaint(hWnd, &ps);// 获取完整客户区尺寸RECT rc;GetClientRect(hWnd, &rc);// 全屏时:整个窗口作为显示区域RECT displayRect rc;// 纯黑背景FillRect(hdc, &displayRect, (HBRUSH) GetStockObject(BLA…...
禅道MCP Server开发实践与功能全解析
一、简介 1、MCP Server核心定义 MCP Server(Meta Command Protocol Server)是一种基于客户端-服务器架构的轻量级服务程序,采用统一的mcp协议格式,通过连接多样化数据源和工具为AI应用提供扩展能力。它作为中间层,实…...
Vue.js组件安全开发实战:从架构设计到攻防对抗
目录 开篇总述:安全视角下的Vue组件开发新范式 一、Vue.js组件开发现状全景扫描 二、安全驱动的Vue组件创新架构 三、工程化组件体系构建指南 四、深度攻防对抗实战解析 五、安全性能平衡策略 结语:安全基因注入前端开发的未来展望 下期预告&…...
代发考试战报:4月份最新锐捷RCNA RCNP 考试通过战报
锐捷 RCNA云计算 R4111 考试通过,RCNA 安全 R3111 考试通过,RCNP无线 R5211考试通过,RCNP路由考试通过,等等 成绩单战报...
卫星互联网技术加速发展,遨游卫星电话为生命添一份“保险”
卫星互联网通过高中低轨卫星组网,实现了对海洋、沙漠、极地等“信息盲区”的全域覆盖。据国际电信联盟(ITU)统计,截至2024年底,全球在轨卫星数量已突破1万颗,其中我国“千帆星座”“GW星座”等低轨计划加速…...
文件IO7(中文字库的原理与应用/目录检索原理与应用/并发编程的原理与应用)
中文字库的原理与应用 ⦁ 基本概念 一般在项目中都会显示汉字,都采用中文简体字符集,计算机早期只有ANSI组织设计的ANSII码,其实也属于字符集,这套字符集并未收录中文,只收录256个字符。 所以后期中国国家标准总局设…...
达梦数据库-学习-16-常用SQL记录(持续更新)
目录 一、环境信息 二、介绍 三、查询SQL 1、数据库的总使用空间大小 2、各个表空间的总大小 3、使用空间最大的50个对象 4、使用率最高的50个sequence 5、使用空间率最高的50个自增列 6、定位锁 7、支持HINT 8、表数据页使用率 9、备份文件相关信息 10、初始化库参…...
使用setTimeout模拟setInterval
const SECOND 1000 const MINUTE 60 * SECOND const HOUR 60 * MINUTE const DAY 24 * HOUR/*** description: 根据传入的毫秒值格式化为时间* param {*} time:毫秒值* returns:{days, hours, minutes, seconds, milliseconds}*/ function parseTime…...
Cesium实现鹰眼图和主地图联动
本文是vuets实现的,想要转为react,只需要修改以下几部分内容 1. 将 reactive 定义的数据直接改写为 let定义 2. 将 watch 监听的内容改成对应的监听写法 3. 将 ref 定义的字段改写为对应的写法 该模块实现的功能: 通过点击鹰眼图的某一位置…...
文件IO6(开机动画的显示原理/触摸屏的原理与应用)
开机动画的显示原理 ⦁ 基本原理 一般电子产品在开机之后都会加深用户印象,一般开机之后都会播放一段开机动画(视频、GIF…),不管哪种采用形式,内部原理都是相同,都是利用人类的眼睛的视觉暂留效应实现的…...
Linux内核分页——线性地址结构
每个进程通过一个指针(即进程的mm_struct→pgd)指向其专属的页全局目录(PGD),该目录本身存储在一个物理页框中。这个页框包含一个类型为pgd_t的数组,该类型是与架构相关的数据结构,定义在<as…...
每日算法-250411
这是我今天的 LeetCode 刷题记录和心得,主要涉及了二分查找的应用。 3143. 正方形中的最多点数 题目简述: 思路 本题的核心思路是 二分查找。 解题过程 为什么可以二分? 我们可以对正方形的半边长 len 进行二分。当正方形的半边长 len 越大时&…...
虚幻基础:碰撞帧运算
能帮到你的话,就给个赞吧 😘 文章目录 碰撞碰撞盒线段检测 帧运算:每个程序流就是一帧的计算结果速度过快时(10000),导致每帧移动过大(83),从而导致碰撞盒错过而没有碰撞速度快的碰撞要用线段检测 碰撞 碰撞盒 线段检…...
AI反检测如何在TikTok养号中发挥关键作用?
在 TikTok 这个全球性的短视频平台上,账号的养成和管理成为了创作者和品牌不可忽视的一环。随着平台对内容和账号行为的监管越来越严格,传统的养号方法已经难以适应新的挑战。在这一背景下,AI 反检测技术应运而生,它通过模拟人类行…...
鸿蒙案例---生肖抽卡
案例源码: Zodiac_cards: 鸿蒙生肖抽奖卡片 效果演示 初始布局 1. Badge 角标组件 此处为语雀内容卡片,点击链接查看:https://www.yuque.com/kevin-nzthp/lvl039/rccg0o4pkp3v6nua 2. Grid 布局 // 定义接口 interface ImageCount {url:…...
【AI编程技术爆发:从辅助工具到生产力革命】
目录 前言:技术背景与价值当前技术痛点解决方案概述目标读者说明 一、技术原理剖析核心概念图解关键技术模块技术选型对比 二、实战演示环境配置要求核心代码实现运行结果验证 三、性能对比测试方法论量化数据对比(2023年数据)结果分析 四、最…...
【前后端】npm包mysql2的使用__nodejs mysql包升级版
不定期更新,建议关注收藏点赞。 目录 简介使用说明 还在用mysql包吗?已经过时啦! 简介 mysql2 是一个用于 Node.js 的 MySQL 数据库驱动,它是 mysql 包的升级版,性能更好,支持 Promise 和 async/await&…...
基于LangChain的Native RAG简单样例
本文代码: Github 文章目录 1. 概述2. Native RAG 概述3. 实战:基于LangChain实现简单的Native RAG概述环境配置文档分割定义Embedding模型构建向量数据库与LLM交互 参考文献 1. 概述 众所周知, 大模型可以回答它知道的内容。但如果用户问的是它不知道…...
数据结构基础(2)
1.什么是算法? 算法:算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作。 算法定义中,提到了指令,指令能被人或机器等计算装置执行。它可以是计算机指令&a…...
慢查询解决思路
1. 复现问题 慢查询的出现是常态还是偶尔?是否在业务允许范围内? "不要过早优化,先 Make it work / right,再 Make it fast。" 建议先将查询语句及其触发条件记录下来,便于后续测试、分析和对比。 2. 定位问题 2.1 单机数据库: explain查询执行计划 数据库默…...
前端下载文件时浏览器右上角没有保存弹窗及显示进度,下载完之后才会显示保存弹窗的问题定位及解决方案
需求背景 在开发过程中会发现,有的时候下载后端返回的文件,浏览器右上角不会进行保存弹窗的弹出及下载进度,而是接口响应后文件下载完才会弹出保存并且没有进度条效果,这就导致在点击下载后用户是不知道文件下载到什么进度了&…...
Streamlit在测试领域中的应用:构建自动化测试报告生成器
引言 Streamlit 在开发大模型AI测试工具方面具有显著的重要性,尤其是在简化开发流程、增强交互性以及促进快速迭代等方面。以下是几个关键点,说明了 Streamlit 对于构建大模型AI测试工具的重要性: 1. 快速原型设计和迭代 对于大模型AI测试…...
IP组播技术与internet
1.MAC地址分为三类:广播地址;组播地址;单播地址 2.由一个源向一组主机发送信息的传输方式称为组播。 3.组播MAC地址,第一个字节的最后一位为1; 单播MAC地址,第一个字节的最后一位为0; 4.不能…...
[Java基础]StringBuilder解析
StringBuilder简单总结与源码预览。 之前写StringBuilder对象默认简写为sb,被说是骂人不让用了,现在写成strBuilder了。大家一般写什么呢 StringBuilder预留空间设计 已知Redis的String结构是通过预留空间的形式来避免频繁地分配空间。 那么Java中有没有…...
国内智能外呼系统市场概况及技术发展趋势
根据最新行业报告和用户评价,国内智能外呼系统市场呈现快速增长态势,预计2025年市场规模将达到180亿元人民币,年复合增长率约20%。主要驱动因素包括AI技术成熟、企业降本增效需求以及政策扶持(如工信部《智能语音产业发展行动计划…...
小推桌面-一款全新的第三方电视桌面-全网通桌面
你是否渴望更高效、便捷地使用机顶盒桌面?小推桌面、乐看家桌面是绝佳之选!它们的界面简洁,操作轻松上手,能快速找到所需应用,大大节省时间。 小推桌面支持个性化定制,可按个人喜好调整布局、添加组件&…...
SQL实战篇,数据库在Kooboo中的实际应用(一)
本文将结合实际操作与代码示例,展示SQL 在 Kooboo 中的实际应用 仅需两步:动态创建表 基础查询,无需复杂配置,快速上手! 一、动态创建表:插入数据 Kooboo 支持多种数据库,以 SQLite 为例&…...
Matlab 调制信号和fft变换
1、内容简介 Matlab 194-调制信号和fft变换 可以交流、咨询、答疑 2、内容说明 略 3、仿真分析 略 4、参考论文 略...
2025年的Android NDK 快速开发入门
十年前写过一篇介绍NDK开发的文章《Android实战技巧之二十三:Android Studio的NDK开发》,今天看来已经发生了很多变化,NDK开发变得更加容易了。下面就写一篇当下NDK开发快速入门。 **原生开发套件 (NDK) **是一套工具,使开发者能…...
opensuse Tumbleweed虚拟机上安装
值得一提的是cpu需要给多一点核,不然压力都集中在一个点上温度会比较高,然后就是可能无法正常运行这个安装界面。 前面好像是半自动的,一直到这里选择桌面界面需要手动选择 这边必然选大蜥蜴的kde,那个蜥蜴菜单还是很好看的。 …...
AI避坑:AI生成的文件格式不一定对
今天就碰到了原来正确的文件,AI生成后文件变味UTF-8 BOM文件 导致MAUI解析出错An error occured while parsing Xaml: 根级别上的数据无效。 第 1 行,位置 1 解决方案: 将文件用文本编辑器打开,另存为UTF-8格式文件...
蓝桥杯真题-危险系数DF
抗日战争时期,冀中平原的地道战曾发挥重要作用。 地道的多个站点间有通道连接,形成了庞大的网络。但也有隐患,当敌人发现了某个站点后,其它站点间可能因此会失去联系。 我们来定义一个危险系数DF(x,y): 对于两个站点x和…...
四、TorchRec的推理优化
四、TorchRec的推理优化 文章目录 四、TorchRec的推理优化前言一、TorchRec 推理优化的两个主要区别是二、TorchRec 提供了以下内容,以将 TorchRec 模型转换为可用于推理的模型总结 前言 推理环境与训练环境不同,它们对性能和模型大小非常敏感。 一、To…...
Linux 系统中从源码编译安装软件
以下是 Linux 系统中 从源码编译安装软件 的详细步骤和注意事项,帮助你掌握这一高级操作技能: 一、编译安装的核心流程 1. 下载源码包(通常为 .tar.gz/.tar.bz2/.tar.xz) 2. 解压源码包 3. 进入源码目录 4. 配置编译参数…...
【AI论文】OLMoTrace:将语言模型输出追溯到万亿个训练标记
摘要:我们提出了OLMoTrace,这是第一个将语言模型的输出实时追溯到其完整的、数万亿标记的训练数据的系统。 OLMoTrace在语言模型输出段和训练文本语料库中的文档之间找到并显示逐字匹配。 我们的系统由扩展版本的infini-gram(Liu等人…...
BeautifulSoup 踩坑笔记:SVG 显示异常的真正原因
“这图是不是糊了?”以为是样式缺了?试试手动复制差异在哪?想用对比工具一探究竟……简单到不能再简单的代码,有问题吗?最后的真相:viewBox vs viewbox,preserveAspectRatio vs preserveaspectr…...
ai-warp 开源的Platformatic Stackable 与 AI 服务交互
一、软件介绍 文末提供程序和源码下载学习 ai-warp 开源的Platformatic Stackable 与 AI 服务交互 二、用法 npx create-platformaticlatestSelect Application, then platformatic/ai-warp 选择 Application(应用程序 ),然后选择 platfor…...
AI比人脑更强,因为被植入思维模型【53】反熵增思维模型
giszz的理解:熵用来形容系统的混乱程度。熵增就是从有序到无序,反熵增就是从无序到有序。其实阴阳二级,世界总是在变化之中。保持清醒的头脑,认识到当前是有序还是无序的,如何改变,让事物向着自己希望的方式…...
408 计算机网络 知识点记忆(8)
前言 本文基于王道考研课程与湖科大计算机网络课程教学内容,系统梳理核心知识记忆点和框架,既为个人复习沉淀思考,亦希望能与同行者互助共进。(PS:后续将持续迭代优化细节) 往期内容 408 计算机网络 知识…...
DDR管脚违例
管脚验证,出现上述违例 上述警告是IO电平配置存在冲突,主要原因是这里配置没有显示电平特性,那么vivado工具默认是生成IP的底层的代码中自带的XDC的电平,这个就冲突了。 出现这个的主要原因还是vivado某个版本工具存在漏洞&#x…...
25年河南事业单位报名详细流程图解
1.报名时间为2025年4月11日9∶00至4月17日17∶00; 2.网上缴费:2025年4月12日9:00至4月18日17:00; 3.打印准考证:2025年5月12日9∶00至5月18日14∶30; 4.笔试时间:2025年5月18日; 5.报名方式…...
一维差分数组
2.一维差分 - 蓝桥云课 问题描述 给定一个长度为 n 的序列 a。 再给定 m 组操作,每次操作给定 3 个正整数 l, r, d,表示对 a_{l} 到 a_{r} 中的所有数增加 d。 最终输出操作结束后的序列 a。 Update: 由于评测机过快,n, m 于 20…...
Windows 录音格式为什么是 M4A?M4A 怎样转为 MP3 格式
M4A 格式凭借其高效的压缩技术和卓越的音质表现脱颖而出,成为了包括 Windows 在内的众多操作系统默认的录音格式选择。然而,尽管 M4A 格式拥有诸多优点,不同的应用场景有时需要将这些文件转换为其他格式以满足特定需求。 本文将探讨 M4A 格式…...
【KWDB 创作者计划】第一卷:基础架构篇
以下是KWDB技术白皮书第一卷:基础架构篇的完整内容展示,包含要求的三个核心章节的深度解析。我们将以技术严谨性结合可读性的方式呈现,实际交付时会进一步扩展示意图和代码示例。 目录 KWDB技术白皮书卷一:基础架构篇 1. 数…...