常用的字符函数和字符串函数
目录一.一个参数的字符函数1.字符分类函数2.字符转换函数二.两个参数 长度不受限的字符串函数1.strcpy函数2.strcat函数3.strcmp函数三.三个参数 长度受限的字符串函数1.strncpy函数2.strncat函数3.strncmp函数四.其他字符串函数1.strstr函数2.strlen函数3.strtok函数4.strerror函数一.一个参数的字符函数1.字符分类函数用于判断字符的类型专门用于字符分类。需包含头文件ctpye.h例如isalpha判断参数是否是字母isdigit 判断参数是否是数字符合条件返回真不符合返回假。2.字符转换函数int tolower(int c);//将参数从大写转为小写 int touppper(int c);//将参数从小写转为大写用于转换大小写。二.两个参数 长度不受限的字符串函数1.strcpy函数char* strcpy(char* destination,const char* source); char arr1[] abc; char arr2[10] {0}; strcpy(arr2,arr1);strcpy用于拷贝字符串将 arr1(source) 的字符串拷入 arr2(destination)。注意源字符串必须以 ‘\0’ 结尾。会将源字符串的 ‘\0’ 拷入目标空间。目标空间必须足够大 确保能放入拷贝的字符串。目标空间必须可修改。const char* destination//error 目标空间此时不能修改 char* p abcd;//error 常量字符串不能被修改 p为指针 指向首字符的地址 char* p[10] abcd;//此时 p为数组名 数组中存放字符串 可修改模拟实现char*my_strcpy(char*dest,constchar*src){assert(destsrc);//确保两个指针非空char*resdest;while(*dest*src)//后先用再加{//通过赋值拷贝数据 将\0赋值给dest后表达式为 0while终止循环;//空语句}returnres;//返回目标空间的起始地址}2.strcat函数和strcpy函数很像strcpy从开头覆盖到’\0’结束strcat从结尾’\0’开始覆盖 直到整个源字符串追加完成。strcpy 是替换strcat 是追加。注意源字符串必须以 ‘\0’ 结尾。从目标字符串的 ‘\0’ 开始追加 ‘\0’被覆盖将源字符串整体拷入包括’\0’。目标空间必须足够大 确保能放入源字符串。目标空间必须可修改。模拟实现char*my_strcat(char*dest,constchar*src){assert(destsrc);//确保两个指针非空char*resdest;while(*dest)//找到\0 不用再加了{dest;}while(*dest*src)//dest从\0开始 通过赋值拷贝数据{;//空语句}returnres;//返回目标空间的起始地址}strcat函数的模拟实现 相比 strcpy 只多了一个找’\0’的while循环。3.strcmp函数用于比较两个字符的大小。int strcmp(const char* str1, const char* str2); int res strcmp(abc,abcd);//0从左到右比较字符的ASCII码大小字符相同则比较下一个字符直到得出结果ASCII码值小 则小返回值小于0ASCII码值大返回值大于0。如果完全相同返回 0。\0’也参与比较 其ASCII码值为 0。if(abc abcd)//error ...直接让两个字符比较比较的是两个字符串首字符的地址 而不是字符串的内容。模拟实现intmy_strcmp(constchar*str1,constchar*str2){assert(str1str2);while(*str1*str2){if(*str1\0)//两个字符串均为\0return0;//相等str1;str2;}return*str1-*str2;//如果str1str2 返回值0//如果str1str2 返回值0}三.三个参数 长度受限的字符串函数1.strncpy函数char arr1[] abc; char arr2[10] xxxxxxx; //strcpy(arr2,arr1);abc\0xxx //strncpy(arr2,arr1,3);abcxxxx (只覆盖前3位 没有\0) strncpy(arr2,arr1,5);//abc\0\0xx (位数不够补\0)可以自行决定拷贝的个数。2.strncat函数char arr1[] abc; char arr2[10] qq\0xxxxxxx; strncat(arr2,arr1,2);//qqab\0xxxxxxx可以自行决定追加的个数。覆盖’\0’追加完成后再加回一个’\0’。3.strncmp函数char str1[] abc; char str2[] abe; strncmp(str1, str2, 2);//0 相等可以自行决定比较的字符数。四.其他字符串函数1.strstr函数string string 在字符串中找字符串子字符串。char* strstr(const char* str1, const char* str2);在str1中找str2是否存在如果存在 返回str1中 str2首字符出现的地址找不到则返回NULL。模拟实现constchar*my_strstr(constchar*str1,constchar*str2){constchar*s1NULL;constchar*s2NULL;constchar*curstr1;while(*cur){s1cur;s2str2;while(*s1*s2*s1!\0*s2!\0)//找到字符 且未结束{s1;s2;}if(*s2\0)//str2已被找到returncur;//返回起始地址cur;//如果 *s1\0大循环结束*s2\0 已找到//*s1!*s2 未找到cur1 继续找 直到找到或者找不到}}2.strlen函数size_t strlen(const char*str);用于获取字符串的长度。检测 ‘\0’ 前的字符个数。注意参数指向的字符串必须包含 ‘\0’ 。需包含头文件 string.h 。返回值类型为 size_t (无符号)。if(strlen(ab)-strlen(abcd)0)printf(1);elseprintf(0);表面看 2 - 4 -2打印结果应为 0但实际打印结果为 1。因为该函数的返回值类型为 size_t 无符号-2的补码会被当做一个非常大的正数输出因此打印 1。3.strtok函数char* strtok(char*str, const char* sep);因为字符串内容会被strtok函数改变字符串一般都是副本 且可以修改。char str[] abccde.qwe; char temp[20] {0}; strcpy(temp, str);sep指向一个字符串这个字符串是分割符字符的集合。str指向的字符串 包含sep指向的字符串中的分隔符这个分隔符记为标记。const char* sep .;//两个分隔符标记 和 .strtok函数会找到这个标记将其变为’\0’并返回指向这个标记的指针。char* p strtok(temp, sep);//返回第一个标记的地址 赋给p p strtok(NULL,sep);//查找下一个标记如果 str ! NULL 函数将找到字符串的第一个标记并保存它的位置地址。如果 str NULL函数将从被保存的位置开始查找下一个标记。如果标记被找完返回NULL。也可以如下编写程序char* p NULL;//定义一个指针并置于NULL 防止野指针出现 for(p strtok(temp, sep); p!NULL; p strtok(NULL, sep)) { printf(%s ,p);//打印结果 } //abc\0cde\0qwestrtok函数从被保存位置开始找下一个标记运用了static。4.strerror函数在C语言中库函数调用失败会记录错误码错误码存放在全局变量errno中。在头文件 errno.h 中有说明。char* strerror(int errnum);函数可以把参数部分错误码 对应的字符串信息的地址返回来。每一个数字错误码对应了一条错误信息这个信息也是字符串具有地址。没有错误时 errno为 0有错误时 errno存放错误相关的错误码使用strerror函数将具体的错误信息地址带回 用printf函数打印展现。char* p strerror(1); printf(%s, p); perror(hello);// hello: ...(错误信息)perror 相当于 printf strerror自定义信息xxxxx(错误信息)。

相关新闻

自研音乐播放器:批量下载歌词的极致体验

自研音乐播放器:批量下载歌词的极致体验

在日常生活中, 我是一个比较喜爱听音乐的人, 因为我的电脑本地存储了上千首音乐文件, 但是绝大多数歌曲都没有歌词信息。因此, 每当我想要跟唱的时候, 往往需要手动地在互联网上进行查找, 再逐一下载LRC格式的歌词文本, 这个过程通常会耗费两三个小时也难以完成。到了后来, 我经…

2026/10/2 19:03:28 阅读更多 →
从零开发农业种子商城:Node.js+Vue全栈实践与踩坑复盘

从零开发农业种子商城:Node.js+Vue全栈实践与踩坑复盘

做农业类电商系统,尤其是种子商城,和普通卖衣服、卖数码的站点完全是两码事。我前阵子用 Node.js 和 Vue 框架从零开发了一套农业种子商城系统,过程中边写边改,从数据库表设计到订单扣库存、再到部署上线,踩了不少坑。…

2026/10/2 20:50:32 阅读更多 →
LLM预训练到领域适配:算力、数据、微调与部署全流程实践

LLM预训练到领域适配:算力、数据、微调与部署全流程实践

如果你和当年的我一样,天真地以为把开源 LLM 代码拉下来、找几个 TB 的语料、丢进显卡里跑起来,就算完成了预训练——那这篇内容就是来帮你清醒的。我真正下场做 LLM 预训练,再到把模型适配到垂直领域,完整流程走下来最大的感受是…

2026/10/2 20:48:52 阅读更多 →

最新新闻

TerraScan点云处理实战:参数原理与LiDAR测绘精度控制

TerraScan点云处理实战:参数原理与LiDAR测绘精度控制

简介:本资源是一份面向测绘、遥感、地理信息系统(GIS)及三维建模领域从业者与高校相关专业师生的技术参考文献,系统讲解基于TerraScan软件的LiDAR点云数据处理全流程。内容涵盖LiDAR技术原理与发展现状、TerraScan核心功能&#x…

2026/10/2 22:51:07 阅读更多 →
HGRV轨迹预测:贝叶斯粒子滤波建模与Python实现

HGRV轨迹预测:贝叶斯粒子滤波建模与Python实现

简介:这是一份关于高超声速滑翔飞行器(HGRV)轨迹预测的完整复现资料,面向具备一定编程和数学基础、对贝叶斯推断与粒子滤波感兴趣的科研人员和工程师。资源以docx文档形式整理了论文复现思路与详细代码解释,覆盖意图代…

2026/10/2 22:51:07 阅读更多 →
LabVIEW数据存储指南:TDMS文件读写方案与性能优化

LabVIEW数据存储指南:TDMS文件读写方案与性能优化

先说结论:这套存储读写方案我在实验室里用了快四年,从单通道几十Hz的慢速采集,到八通道连续一周的疲劳试验,再到偶尔要回放分析的老数据,基本都覆盖到了。如果你正在用LabVIEW做数据采集、信号处理或者设备状态记录&am…

2026/10/2 22:51:07 阅读更多 →
URLLC短码长通信:突破香农极限的实时可靠传输

URLLC短码长通信:突破香农极限的实时可靠传输

1. 什么是URLLC场景下的短码长 regime?——从工厂产线到远程手术的真实需求倒逼出来的通信范式你有没有想过,为什么5G宣传里总说“一毫秒时延”,但实际用手机打视频电话,卡顿还是时有发生?问题不在基站功率&#xff0c…

2026/10/2 22:51:07 阅读更多 →
AI写作合规指南:守住作者性的技术边界

AI写作合规指南:守住作者性的技术边界

1. 事件本质与行业震动:一场关于“作者性”的边界测试 “Author Dropped from Literary Prize over AI Allegations”——这行标题不是一则娱乐八卦,而是一记敲在当代文学创作神经末梢上的重锤。它背后没有算法黑箱的神秘感,也没有技术厂商的…

2026/10/2 22:51:07 阅读更多 →
蛋白质功能位点识别平台构建:从数据到部署的机器学习全流程

蛋白质功能位点识别平台构建:从数据到部署的机器学习全流程

简介:这份PDF文献面向生物信息学、蛋白质功能研究方向的初学者与科研人员,系统讲解如何用支持向量机(SVM)构建蛋白质功能位点识别的通用机器学习平台。内容涵盖非同源序列提取、序列特征编码(基本信息、物化特征、结构…

2026/10/2 22:50:06 阅读更多 →

日新闻

从零搭建AI工程化:模型之外的完整闭环

从零搭建AI工程化:模型之外的完整闭环

先搞清楚一件事:从零开始做 AI 工程化,难的从来不是调模型、写提示词,而是把一套原型 Demo 变成长得像是“正经系统”的东西。你手里可能已经有了能跑通的代码,也可能刚读完一些概念,但真到了要把它变成可维护、可观测…

2026/10/2 0:00:20 阅读更多 →
大模型训练显存估计与混合精度训练实战指南

大模型训练显存估计与混合精度训练实战指南

1. 大模型训练显存估计与混合精度训练详解显存不够用,几乎是每个做大模型训练的人都会撞上的第一堵墙。你可能也经历过:模型代码写完了,数据管道跑通了,满心欢喜地按下训练启动脚本,结果几秒钟后终端弹出一行红字——C…

2026/10/2 0:00:20 阅读更多 →
小样本学习数据集选型指南:27个真正可用的高质量数据集

小样本学习数据集选型指南:27个真正可用的高质量数据集

1. 小样本学习的“弹药库”:为什么你总在找数据集,却总找不到真正能用的? 小样本、数据集——这两个词最近半年在我处理的200多个AI项目咨询里,出现频率排进前三。不是模型调不好,不是代码写不对,而是卡在…

2026/10/2 0:00:20 阅读更多 →

周新闻

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/10/1 19:40:48 阅读更多 →
SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/10/1 19:41:40 阅读更多 →
FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏 【免费下载链接】FireRed-OpenStoryline FireRed-OpenStoryline is an AI video editing agent that transforms manual editing into intention-driven directing through natural language …

2026/10/1 20:05:24 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/2 10:36:31 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/2 5:26:06 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/2 6:09:11 阅读更多 →