C语言:字符函数和字符串函数
往期文章
- C语言:初识C语言
- C语言:分支语句和循环语句
- C语言:函数
- C语言:数组
- C语言:操作符详解
- C语言:指针详解
- C语言:结构体
- C语言:数据的存储
目录
- 往期文章
- 前言
- 1. 函数介绍
- 1.1 strlen
- 1.2 strcpy
- 1.3 strcat
- 1.4 strcmp
- 1.5. strncpy
- 1.6 strncat
- 1.7 strncmp
- 1.8 strstr
- 1.8 strtok
- 1.9 strerror
- 1.10 memcpy
- 1.11 memmove
- 1.12 memcmp
- 2. 库函数的模拟实现
- 2.1 strcpy的模拟实现
- 2.2 stract 的模拟实现
- 2.3 strmcp的模拟实现
- 2.4 strstr的模拟实现
- 2.5 memcpy的模拟实现
- 2.6 memmove的模拟实现
- 后记
前言
今天来盘一下字符函数和字符串函数。
C语言中对字符和字符串的处理很是频繁,但是C语言本身是没有字符串类型的,字符串通常放在 常量字符串 中或者 字符数组 中。 字符串常量 适用于那些对它不做修改的字符串函数。
1. 函数介绍
1.1 strlen

注意,strlen的返回值是无符号整数

1.2 strcpy

1.3 strcat

1.4 strcmp


1.5. strncpy

1.6 strncat

1.7 strncmp


1.8 strstr

1.8 strtok

1.9 strerror

1.10 memcpy

1.11 memmove

1.12 memcmp

2. 库函数的模拟实现
2.1 strcpy的模拟实现
#include<stdio.h>
#include<assert.h>void my_strcpy(char *dest,const char *src)
{assert(dest != NULL);assert(src != NULL);while (*dest++ = *src++){;}*dest = *src;
}
int main()
{char arr1[20] = "********************";char arr2[] = "hello";my_strcpy(arr1, arr2);printf("%s\n", arr1);return 0;
}
2.2 stract 的模拟实现
#include<stdio.h>
#include<assert.h>char* my_strcat(char *dest,char *src)
{assert(dest);assert(src);char *ret = dest;while (*dest){dest++;}while (*dest++ = *src++){;}return ret;
}
int main()
{char arr1[20] = "hello";char arr2[] = "world";printf("%s\n", my_strcat(arr1, arr2));return 0;
}
2.3 strmcp的模拟实现
#include<stdio.h>
#include<assert.h>int my_strcmp(char *s1, char *s2)
{assert(s1);assert(s2);while (*s1 == *s2){if (*s1 == '\0')return 0;s1++;s2++;}return *s1 - *s2;
}
int main()
{char arr1[20] = "hello";char arr2[] = "world";printf("%d\n", my_strcmp("abd", "abp"));return 0;
}
2.4 strstr的模拟实现
#include<stdio.h>
#include<assert.h>
char* my_strstr(const char *s1, const char *s2)
{assert(s1&&s2);char *cp = s1;while (*cp){char *p1 = cp;char *p2 = s2;while (*p1!='\0'&&*p2!='\0'&&*p1 == *p2){p1++;p2++;}if (*p2 == '\0'){return cp;}cp++;}return NULL;
}int main()
{char arr1[] = "abcdef";char arr2[] = "bcd";char *ret = my_strstr(arr1, arr2);if (ret != NULL)printf("%s\n", ret);elseprintf("找不到\n");return 0;
}
2.5 memcpy的模拟实现
void * memcpy ( void * dst, const void * src, size_t count)
{
void * ret = dst;
assert(dst);
assert(src);
while (count--) {
*(char *)dst = *(char *)src;
dst = (char *)dst + 1;
src = (char *)src + 1;
}
return(ret);
}
2.6 memmove的模拟实现
void * memmove(void * dst, const void * src, size_t count)
{void * ret = dst;if (dst <= src || (char *)dst >= ((char *)src + count)) {while (count--) {*(char *)dst = *(char *)src;dst = (char *)dst + 1;src = (char *)src + 1;}}else {/** Overlapping Buffers* copy from higher addresses to lower addresses*/dst = (char *)dst + count - 1;src = (char *)src + count - 1;while (count--) {*(char *)dst = *(char *)src;dst = (char *)dst - 1;src = (char *)src - 1;}}return(ret);
}
后记
本篇博客就分享到这里啦,希望对大家有所帮助。事实证明,我暑假还没有好好做人。

相关文章:
C语言:字符函数和字符串函数
往期文章 C语言:初识C语言C语言:分支语句和循环语句C语言:函数C语言:数组C语言:操作符详解C语言:指针详解C语言:结构体C语言:数据的存储 目录 往期文章前言1. 函数介绍1.1 strlen1.…...
基于.Net Core开发的医疗信息LIS系统源码
SaaS模式.Net Core版云LIS系统源码 医疗信息LIS系统是专为医院检验科设计的一套实验室信息管理系统,能将实验仪器与计算机组成网络,使病人样品登录、实验数据存取、报告审核、打印分发,实验数据统计分析等繁杂的操作过程实现了智能化、自动化…...
部署工业物联网可以选择哪些通信方案?
部署工业物联网有诸多意义,诸如提升生产效率,降低管理成本,保障生产品质稳定,应对长期从业劳动力变化趋势等。针对不同行业、场景,工业物联网需要选择不同的通信方案,以达到成本和效益的最佳平衡。本篇就简…...
flutter-移动端适配
不同屏幕之间的尺寸适配 使用插件 flutter_screenutil flutter_screenutil flutter 屏幕适配方案,用于调整屏幕和字体大小的flutter插件,让你的UI在不同尺寸的屏幕上都能显示合理的布局! 安装 # add flutter_screenutil flutter_screenutil: ^5.8.4 o…...
MySQL 常用函数
一、数学函数 1、ABS(x) 返回绝对值。 mysql> select abs(-4); --------- | abs(-4) | --------- | 4 | --------- 1 row in set (0.00 sec) 2、PI() 返回圆周率,并四舍五入保留五位小数。 mysql> select pi(); ----------…...
动态路由的实现—正则表达式
文章目录 前言一、什么是正则表达式?二、正则表达式在动态路由中的作用三、实现一个简单的路由调度器总结 前言 动态路由有很多种实现方式,支持的规则、性能等有很大的差异。例如开源的路由实现gorouter支持在路由规则中嵌入正则表达式,例如…...
Android实现超出固定行数折叠文字“查看全文“、“收起全文“
先上效果图 分析问题 网上有很多关于这个的代码,实现都过于复杂了,github上甚至还看到一篇文章600多行代码,结果一跑起来全是bug。还是自己写吧!!! 如果我们需要换行的"查看全文"、"收起全…...
Python上楼梯问题:递归解法探究(斐波那契变种)(记忆化递归)
文章目录 上楼梯问题:递归解法探究问题定义解决方案1. 递归2. 记忆化递归关于python memo{}默认参数和字典的语法语法功能版本信息注意事项 结论 上楼梯问题:递归解法探究 在这篇文章中,将对上楼梯问题进行深入探讨。上楼梯问题是一种常见的…...
AI重新定义音视频生产力“新范式”
// 编者按:AIGC无疑是当下的热门话题和场景。面对AI带来的技术变革和算力挑战,该如何应对?LiveVideoStackCon 2023上海站邀请到了网心科技副总裁武磊为我们分享网心在面对AI应用场景和业务需求下的实践经验。 文/武磊 编辑/LiveVideoStack …...
Jmeter生成可视化的HTML测试报告
Jmeter也是可以生成测试报告的。 性能测试工具Jmeter由于其体积小、使用方便、学习成本低等原因,在现在的性能测试过程中,使用率越来越高,但其本身也有一定的缺点,比如提供的测试结果可视化做的很一般。 不过从3.0版本开始&…...
5G技术与其对智能城市、物联网和虚拟现实领域的影响
随着第五代移动通信技术(5G)的到来,我们即将迈向一个全新的数字化世界。5G技术的引入将带来更高的速度、更低的延迟和更大的连接性,推动了智能城市、物联网和虚拟现实等领域的发展。 首先,5G技术将带来超越以往的网络速…...
leetcode做题笔记88. 合并两个有序数组
给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。 请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。 注意:最终,合并后数组…...
stm32开关控制led灯泡(附Proteus电路图)
说明:我的灯泡工作电压2V,电流设置为10um,注意了不是10毫安时微安啊,要不然电流太小亮不起来的。 2:我用的开关不是按钮button而是switch, 3:PB0,PB1默认都是低电平,采用了PULLDOWN模式,如果设…...
win10 wsl ubuntu 更换版本为18.04 apt换国内源Python换国内源;默认root
控制面板里面应用模块找到Ubuntu,可以卸载或者移动到其他盘。 Microsoft 应用程序 - ubuntu https://apps.microsoft.com/store/search/ubuntu?hlzh-cn&glcn&rtc1 选择想要的版本安装。 cp /etc/apt/sources.list /etc/apt/sources.list.bak nano /etc/ap…...
C++ Primer 第1章 开始
C Primer 第1章 开始 1.1 编写一个简单的C程序1.1.1 编译、运行程序一、程序源文件命名约定二、从命令行运行编译器 练习 1.2 初识输入输出一、标准输入输出对象二、一个使用IO库的程序三、向流写入数据四、使用标准库中的名字五、从流读取数据六、完成程序 1.3 注释简介一、C中…...
【STM32 学习】电源解析(VCC、VDD、VREF+、VBAT)
VCC电源电压GND电源供电负电压(通常接地)VDD模块工作正电压VSS模块工作负电压VREFADC参考正电压VREF-ADC参考负电压VBAT电池或其他电源供电VDDA模拟供电正电压VSSA模拟供电负电压 一、VCC(供电电压) VCC是指芯片的电源电压&#…...
C语言实例_解析GPS源数据
一、GPS数据格式介绍 GPS(全球定位系统)数据格式常见的是NMEA 0183格式,NMEA 0183格式是一种用于导航设备间传输数据的标准格式,定义了一套规范,使得不同厂商的设备可以通过串行通信接口(常见的是RS-232&a…...
LVS+Keepalived
Keepalived概述: keepalived软件 就是通过vrrp协议实现高可用功能 vrrp通信原理: vrrp就是虚拟路由冗余协议,它的出现就是为了解决静态路由的单点故障vrrp是通过一种竞选的一种协议机制将路由交给某台vrrp路由器vrrp用ip多播的方式【多播地…...
uni-app根据经纬度逆解析详细地址
uni-app中的getLocation()方法可以获取到用户当前的地理位置(经纬度)、速度。 但是返回参数中的address在app中才会显示,小程序中不会显示,所以我们需要进行逆解析其地址,解析出它的地址信息。 1.首先要在腾讯位置服务…...
【数据结构】吃透单链表!!!(详细解析~)
目录 前言:一.顺序表的缺陷 && 介绍链表1.顺序表的缺陷2.介绍链表(1)链表的概念(2)链表的结构(3)链表的功能 二.单链表的实现1.创建节点的结构2.头文件函数的声明3.函数的实现ÿ…...
MAX-M8C-0,支持辅助定位的超紧凑GNSS模块
简介今天我要向大家介绍的是 u-blox 的并发GNSS模块——MAX-M8C-0。这是一款专为成本敏感型应用设计、具有超低功耗的超紧凑高性能模块。该模块基于高性能 u-blox M8 GNSS引擎,支持并发接收多达3个GNSS系统(GPS/Galileo GLONASS或BeiDou)&am…...
C#调用打印机老是失败?先别怪代码,这5个Windows驱动设置坑你踩过几个?
C#调用打印机故障排查指南:5个被忽视的Windows驱动陷阱 当你信心满满地写完C#打印代码,点击"打印"按钮后却只收获了一片寂静——打印机毫无反应,控制台也没有任何错误提示。这种挫败感每个C#开发者都经历过。但先别急着重写代码&am…...
Windows系统硬件指纹伪装:EASY-HWID-SPOOFER实战指南
Windows系统硬件指纹伪装:EASY-HWID-SPOOFER实战指南 【免费下载链接】EASY-HWID-SPOOFER 基于内核模式的硬件信息欺骗工具 项目地址: https://gitcode.com/gh_mirrors/ea/EASY-HWID-SPOOFER 在数字时代,保护个人隐私变得越来越重要。EASY-HWID-S…...
error while updating dependencies: node_modules包资源权限报错 缓存包构建
vue3vite - 解决报错error while updating dependencies:Error:EACCES:permission denied,mkdir ‘x‘(系统权限问题) 问题说明 在vite vue3项目开发中,出现报错: [vitel error while updating dependencies: Error:EACCES:permission deni…...
知网AIGC检测算法原理解读:知网如何判断AI写作2026年免费应对完整深度分析
知网AIGC检测算法原理解读:知网如何判断AI写作2026年免费应对完整深度分析 关于知网AIGC检测算法解读,我整理了几个核心问题,逐一分析。 实战方案先给出来:应对AIGC检测最有效的是专业工具深层文本重构,嘎嘎降AI&…...
CentOS 7服务器上,从零搞定NVIDIA驱动和CUDA 11.1的保姆级避坑指南
CentOS 7服务器NVIDIA驱动与CUDA 11.1实战避坑手册 接手一台老旧GPU服务器时,最令人头疼的莫过于搭建深度学习环境。那些看似简单的安装步骤背后,往往隐藏着无数个让新手崩溃的"坑"。本文将带你穿越雷区,用最稳妥的方式在CentOS 7上…...
跨境电商团队如何用Taotoken调用AI模型批量生成多语言商品描述
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 跨境电商团队如何用Taotoken调用AI模型批量生成多语言商品描述 对于跨境电商运营团队而言,为海量商品生成不同语言版本…...
STM32H743XIH6实战:用CubeMX搞定TIM6定时器中断和USART1串口通信(附完整代码)
STM32H743XIH6实战:CubeMX配置TIM6定时器中断与USART1通信全流程解析 1. 开发环境搭建与工程初始化 对于嵌入式开发者而言,一个稳定可靠的开发环境是项目成功的基础。在开始STM32H743XIH6的外设配置前,我们需要确保所有工具链已正确安装并配置…...
【Midjourney API接入实战指南】:20年AI工程老兵亲授避坑清单与生产级部署Checklist
更多请点击: https://intelliparadigm.com 第一章:Midjourney API接入实战导论 Midjourney 作为当前主流的文生图模型之一,官方并未开放标准 RESTful API,但可通过 Discord Bot 模拟交互、WebSocket 协议监听或第三方封装服务实…...
动漫分镜图批量生成实战:用/mj batch+自定义--style raw指令链,单日产出24张电影级分镜(附可复用Prompt矩阵表)
更多请点击: https://intelliparadigm.com 第一章:动漫分镜图批量生成的核心价值与技术边界 动漫分镜图(Storyboard)是动画制作前期的关键资产,传统手绘或半自动流程耗时长、风格不一致、迭代成本高。批量生成技术通…...
