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

【你奶奶都能听懂的C语言】学习篇 第12期 字符处理函数+内存函数

【你奶奶都能听懂的C语言】 第12期 字符操作函数+内存函数

开头:

ok了,在C语言的学习和刷题的过程中,会发现大家往往会对字符或字符串进行一系列的操作,那这一期的学习篇我们就来学习C语言库中给予的字符执行函数+内存函数

字符操作函数

1.字符分类函数

属于什么类型的,这些函数的使用都需要包含头文件:就是C语言中有专门做字符分类的函数,也就是判断一个字符ctype.h
在这里插入图片描述
如果判断为真返回 1,倘若为假返回 0;
:就是比较常用的

  1. 十进制数字:就是判断是否isdigit
  2. 判断是否是字母:isalpha
  3. 判断是否是小写字母:islower
  4. 大写字母:就是判断是否isupper
  5. 判断是否是空白字符:ispace

举个例子:
在这里插入图片描述

2.字符转换函数

toupper: 将字母转换为大写
tolower: 将字母转换为小写

依旧举个例子:
在这里插入图片描述

3.srlen

在这里插入图片描述
统计一串字符中‘ \0 ’ 前字符的个数就是对与 strlen 函数我们已经十分熟悉了,它
在这里插入图片描述
如上图,strlen 统计 \0 前的字符函数,只要遇到 \0 就会返回
要重点注意的是,strlen 的返回类型是 size_t 无符号整形,也就是说如果对它进行减法计算,是不会出现负数的
在这里插入图片描述
如图,为什么这个程序输出的是 > 呢?

//00000000000000000000000000000011--------(3的补码)
//11111111111111111111111111111001--------(-6的补码)
//11111111111111111111111111111100
编译器会认为这是一个无符号整形的数,就是一个很大的正数,所以输出的是 >

4.strcpy

在这里插入图片描述
strcpy 字符串拷贝函数,可以将一个字符串拷贝到另一个数组中,要注意的是,目标数组的空间要足够大,能够存放的下要拷贝的字符串;并且要拷贝的字符串要有 \0 结尾,返回值是目标空间的首元素地址
在这里插入图片描述
strcpy 的模拟构建:
在这里插入图片描述

5.strncpy

在这里插入图片描述我们注意到 strncpy 比 strcpy 支付拷贝函数多了一个 n ,相应的函数参数也多了一个参数 num
strncpy 这个函数是可以限定拷贝字符个数的函数
在这里插入图片描述
可以看到 strncpy 许可将指定个数的字符拷贝到目标空间,字符会直接插入目标空间在这里插入图片描述
假设是上图的情况,编译器也会自动的在字符后面加入 \0 ,故而 strncpy 采用起来更加安全

6.strcat

在这里插入图片描述
strcat 字符串追加函数,允许将一段字符串追加到目标空间后,返回的是目标空间的起始地址
在这里插入图片描述
strcat 的模拟搭建:
在这里插入图片描述
这里有一个障碍:给一串字符,要求将字符串中的空格替换成 %20
通过这道题我们就能够用到 strcat 来在每一段字符串后追加字符串 %20
在这里插入图片描述

7.strncat

在这里插入图片描述
我们可以类比,strncat 相比 strcat 多了一个参数,也就是说它可以将指定个数的字符追加到目标空间
在这里插入图片描述

8.strcmp

在这里插入图片描述
通过strcmp 字符比较函数,能够比较两个字符串是否相等,如果相等返回 0 ,不相等会返回起始不同的字符的字典序差值
在这里插入图片描述
(要注意:C语言标准规定:strcmp 应该返回首个不同字符的ASCll 码差值,然而 vscode 进行了非标准的优化,不同时只会返回 -1,1)

strcmp 的模拟完成:
在这里插入图片描述

##9.strncmp
在这里插入图片描述

比较指定范围的字符串就是strncmp 就
在这里插入图片描述

10.strstr

在这里插入图片描述
strstr 字符查找函数,它会在目标字符串去查找给定的字符串,倘若找到了返回第一次出现的首地址,假设没找到返回 NULL

在这里插入图片描述
strstr 的模拟实现:
在这里插入图片描述

11.strtok

在这里插入图片描述
strtok 字符分割函数,许可将目标字符按照给定的字符进行分割,这要目标字符串中有给定字符中任意一个或一对,就会从此处断开,返回值是分出来的每一段的起始地址
在这里插入图片描述
如上图,大家许可发现只有第一次应用 strtok 函数的时候我们要传入目标空间的地址,剩下的每一次应用,只需要传入空指针 NULL
这样运用太麻烦了,还需要自己先知道一共会分出几段,有没有更加简便的方法?就是但

在这里插入图片描述

12.strerror

在这里插入图片描述
strerrror 错误信息转换函数。在程序运行过程中,如果有错误,会返回一个错误码,每一个错误码都会对应特定的报错,会被 errno 接收存放
在这里插入图片描述
如上图,大家把1~10的错误码凭借 strerror 打印出来,而 strerror 通常和 errno 一起使用

在这里插入图片描述
这里我们并没有 text.txt 文件,只是是以读的方式打开,这时就会生成对应的错误码,我们通过 strerror 打印出错误信息
当然我们可以直接利用 perror 函数:

在这里插入图片描述
在这里插入图片描述

内存函数

以上就是操作字符的一些相关函数,当然C语言也给予了类似功能的一些函数,叫内存函数,不仅能操控字符,还可以执行其他类型的数据

1.memcpy

在这里插入图片描述
memcpy 内存拷贝函数,可以向目标空间拷贝数据,其中的 num 参数单位是字节,也就是要先前计算要拷贝的资料占有多少字节
在这里插入图片描述
在这里插入图片描述
但是如果我们有这样一个情景:
要把同一个数组中的一段区间中的元素和另一段区间的元素交换,这时候就要用memmove处理重叠内存拷贝
(有些编译器,比如 vs 系列,整合了 memcpy 和 memmove 的功能)

2.memmove

在这里插入图片描述
通过其实memmove 的特性和 memcpy 没有太大的区别,只不过memmove 能够处理重叠内存拷贝这种情况
在这里插入图片描述
memmove 的模拟:

在这里插入图片描述
假如说现在我想让绿色方框中的数字放到红色方框中,行想到直接从前往后放就行:

在这里插入图片描述
但是假设红色方框在绿色方框后边,这时候再从前往后放就会有挑战:
先前放到红色方框中的数字会覆盖原先没有被放入的值:
在这里插入图片描述
这时候我们就要从绿色框的后往前放

在这里插入图片描述
那么我们再模拟达成的时候,就要分两种情况:

  1. str1 在 str2 左边的时候,就要从前往后放
  2. str1 在 str2 右边的时候,就要从后往前放

在这里插入图片描述

3.memset

在这里插入图片描述
memset 内存初始化函数,它会将对应的空间按照给定的字节数,将对每一个字节数修改为指定数值

在这里插入图片描述
许可看到经过 memset ,我们将每一个字节都改为了 1

4.memcmp

在这里插入图片描述
memcmp 内存比较函数,按照每一个字节进行比较
在这里插入图片描述

结语:

好了,这一期满满的干货呈现给大家,供大家学习,可以收藏起来防止遗忘后找不到,感谢您的观看

http://www.jsqmd.com/news/355282/

相关文章:

  • 云服务合规:AWS/Azure测试数据驻留指南
  • 【C++】揭秘类与对象的内在机制
  • 现代python安装与管理方法——python-manager
  • 医疗设备测试:FDA法规与ISO 13485整合
  • Protobuf协议
  • 学生党平价首选!高性价比油皮洁面推荐,敏感肌也能放心用 - 资讯焦点
  • COPPA标准在APP测试中的技术实施框架
  • 内蒙古大学计算机研究生老导师详情
  • 网址链接
  • 开源许可证合规:测试工具选型的法律陷阱
  • 【嵌入式就业5】硬件体系与RTOS核心机制:从ARM架构到实时调度
  • GDPR下的测试日志管理:构建合规高效的自动化防护体系
  • 翠韵逐光,琼岛启新 佛山翠升生珠宝翡翠三亚海棠盛大启幕 - 中媒介
  • 2026年防腐蚀工业载冷剂厂家推荐指南 - 资讯焦点
  • 2026国内最新家电售后外包/家电售后安装维修服务商首选推荐神州联保:数字化服务引领者,神州联保值得信赖 - 品牌推荐2026
  • Kong + Consul 实现 网关服务和服务发现
  • 2026年软件测试公众号热度趋势与AI框架实战解析
  • 十四连冠的底蕴:解码格力中央空调全产业链掌控力 - 资讯焦点
  • C语言内存函数(二)
  • 打瓦上分神器!2026高性价比鼠标推荐:罗技G304X秒鲨领衔,中小手玩家必看 - 资讯焦点
  • celery库(python包)与celery 容器的问题
  • 当AI成为赛场“鹰眼”:姿态估计模型如何重塑体育公平
  • 天硕(TOPSSD)技术解析:工业级SSD如何从FTL层面杜绝移动设备断电风险? - 资讯焦点
  • 糖友厨房无糖健康饼干推荐 - 资讯焦点
  • CANN-LLM:基于昇腾 CANN 的高性能、全功能 LLM 推理引擎
  • 东三省优质钢化玻璃供应商推荐榜 - 资讯焦点
  • ‌自动化伦理框架:防止AI过度依赖的设计原则
  • 编译器级优化实战:基于 CANN `tbe-scheduler` 的自定义算子自动调度
  • 深度学习:5层CNN实现图片分类(MATLAB版)
  • 2026市政护栏优质供应商推荐榜 - 资讯焦点