新闻详情

新闻详情

首页 / 资讯中心 / 详情

C语言字符串函数

发布时间:2026/9/1 22:19:36来源:尧图网络
C语言字符串函数
长度不限制深入解析C语言strlen函数的三种实现方式使用字符串函数函数之前要引入头文件string,hstrlen函数size_t strlen( const char*str )功能统计‘\0’之前的字符个数参数: str 指针指向要统计长度的字符串本质是要统计的字符串的首字符的的地址参数是地址所以类型为char* ,但是要传的字符串是常量因为常量不可变所以这里加上了const赋予常属性返回值size_t 无符号整型),意味着计算结果不可能是负数。对于返回值举个例子#includestdio.h#includestring.hint main(){char arr1[] abc;char arr2[] abcdef;if((strlen(arr1)-strlen(arr2))0) //strlen返回值是size_t所以这里运算的结果-3会变为更大的正数{printf(0);}else{printf(“0”);}}运行结果 0 .//《strlen函数的模拟》//第一种利用计数器#includestdio.h#includestdlib.hsize_t my_strlen(const char* str){int count 0;while (*str){count; //因为进入循环说明首字符不是‘\0’,所以字符串长度至少为1所以count放前str;}return count;}int main(){char arr[] abcdef;size_t sz my_strlen(arr);printf(%d, sz);return 0;}第二种利用指针-指针#includestdio.h#includestdlib.hsize_t my_strlen(const char* str){char* start str; //把str这个指针赋值给start这个指针相当于把str内存储的地址赋给start这个指针while (*str){str;}return str - start; | 指针-指针| 结果是两个指针之间的元素个数}int main(){char arr[] abcdef;size_t sz my_strlen(arr);printf(%d, sz);return 0;}第三种递归思路: *str 得到的是首元素如果首元素不为‘\0’,那就返回1剩下bcdef;然后让首元素地址1来到b,因为 b\0,所以再次加1然后依次调用关系网:1 bcdef 11111101cdef 1111101def 111101ef 11101f 1101\0 10#includestdio.h#includestdlib.hsize_t my_strlen(const char* str){if (*str){return 1 my_strlen(str 1);}else{return 0;}}int main(){char arr[] abcdef;size_t sz my_strlen(arr);printf(%d, sz);return 0;}深入解析strcpy函数的实现原理使用前要引入头文件string.hchar* strcpy(char*destination,const char*source)功能拷贝source所指向的字符串里到‘\0’而且包括‘\0’的部分参数 source指向拷贝数据destination指向目标空间两个参数本质是接收首字符的地址源头仅起提供数据作用所以不可变所以是 const char*, 目标空间要能被修改所以无const;返回值最终返回目标空间的起始地址#includestdio.h#includestring.hint main(){char source[] abc;char dest[20] ------------;strcpy(dest, source);printf(%s, dest); //%s 打印字符串这里这个语句表示从dest这个起始地址向后打印直至‘\0’;}注意源头字符串必须含有‘\0’;目标空间要足够大并且可以修改《strcpy的模拟实现》第一种#includestdio.h#includestring.h#includeassert.hchar* my_strcpy(char* dest, const char* source){char* start dest;assert(dest source);//因为循环里使用了*一旦*一个空指针程序就会崩溃所以用assertwhile (*source!\0) // 来检查是否为空指针防止程序崩溃{*dest *source;dest;source;}*dest *source; //这里dest不在起始位置不能直接返回因为要返回目标空间的起始地址 所 // 以开局先加个存档return start;}int main(){char source[] abc;char dest[20] ------------; //这里为了方便调试时看出‘\0’是否是source里的加入‘-----------’//结果为“abc\0--------剩下的均为‘\0’”;char* r my_strcpy(dest, source);printf(%s\n, dest); //有返回值可用也可以不用printf(%s,r);}第二种#includestdio.h#includestring.h#includeassert.hchar* my_strcpy(char* dest, const char* source){char* start dest;assert(dest source);while (*dest *source) //先用后{; //*dest * source;右边先计算得到source所指向的值} // 左边再计算得到的是dest所指向的空间/*while(*source! \0){*dest *source;}*/return start;}int main(){char source[] abc;char dest[20] ------------;char* r my_strcpy(dest, source);printf(%s\n, dest);printf(%s,r);}深入解析strcat函数实现原理使用前引入头文件string.hchar* strcat(char*destination,const char*source)功能 字符串追加把source指向的源字符串追加到destination指向的空间中参数destination: 指针指向目标空间source: 指针指向源头数据返回值目标空间的起始地址注意目标空间中必须有‘\0’,不然不知道从哪里开始追加目标空间必须可以被修改源头数据中也必须有‘\0’;例子#includestdio.h#includestring.h#includeassert.hint main(){char dest[20] hello;char src[] world;char*p strcat(dest, src);printf(%s\n,dest);printf(%s,p);return 0;}《strcat的模拟实现》#includestdio.h#includestring.h#includeassert.hchar* my_strcat(char* dest, const char* src){char* start dest;assert(*dest*src); //防止*NULL导致程序崩溃while (*dest){dest; // 追加从‘\0’开始覆盖}while (*dest *src){;}return start;}int main(){char dest[20] hello;char src[] world;char*p my_strcat(dest, src);printf(%s\n,dest);printf(%s,p);return 0;}深入解析strcmp函数实现原理int strcmp(const char* str1,const char* str2)功能比较两个字符串的大小参数两个字符指针返回值标准规定1.第一个字符串大于第二个字符串返回一个大于0的数字2.第一个字符串等于第二个字符串返回03.第一个字符串小于第二个字符串返回一个小于0的数字比较思路按照字典序来比字典序越靠后越大从第一个字符开始比如第一个字符相同就比较下一个字符直至两个字符不同或者都是‘\0’结束;举个例子#includestdio.h#includestring.h#includeassert.hint main(){char str1[] abcdef;char str2[] abq;int r strcmp(str1,str2);printf(%d\n,r);if (r 0){printf(\n);}else if (r 0){printf(\n);}else{printf(\n);}return 0;}《strcmp的模拟实现》#includestdio.h#includestring.h#includeassert.hint my_strcmp(const char*str1,const char*str2){assert(*str1 *str2);//防止*NULL导致程序崩溃while (*str1 *str2){if (*str1 \0)return 0;str1;str2;}if (*str1 *str2)return 1;elsereturn -1;//可以把if语句换成如下//return *str1 - *str2;}int main(){char str1[] abcdef;char str2[] abq;int r my_strcmp(str1,str2);printf(%d\n,r);if (r 0){printf(\n);}else if (r 0){printf(\n);}else{printf(\n);}return 0;}长度限制strn 比str 更加灵活更加安全char* strncpy(char* destination,const char* source,size_t num);功能和strcoy一样但是最多拷贝num个字符与strcpy相比strncpy的不同源头字符串可以不用必须有‘\0’;size_t num 这个参数让这个函数有了思考目标空间是否够大举例int main(){char dest[20] --------------;char src[] abcd;// strncpy(dest, src, 3); //限制不超过源头字符串长度只会拷贝num个不会在拷贝字符串后加// ‘\0’ char* p strncpy(dest,src,8);//如果超过源头字符串长度超出的部分会自动补‘\0’;printf(%s\n,dest);printf(%s\n,p);//通过以下代码可以逐行打印直观管观察int sz sizeof(dest) / sizeof(dest[0]);int i 0;for (i 0; i sz ; i){printf(%c\n, dest[i]);}return 0;}char* strncat(char* destination,const char*source ,size_t num)功能和strcat一样但是 最多追加num个字符举个例子int main(){char dest[20] -\0-------------;char src[] abcd;strncat(dest, src, 3);//如果num源头字符串长度会自动补‘\0’; //如果大于则有几个追加几个 //并不补‘\0’;printf(%s\n,dest);int sz sizeof(dest) / sizeof(dest[0]);int i 0;for (i 0; i sz ; i){printf(%c\n, dest[i]);}return 0;}int strncmp(const char* str1,const char*str2,size_t)功能和strcmp一样但是最后限制num个字符串进行比较举个例子:int main(){char str1[] abcdef;char str2[] abc;int r strncmp(str1, str2, 4);printf(%d, r);return 0;}
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

基于Java Socket与多线程的极简聊天室实战解析 2026/9/2 14:13:44

基于Java Socket与多线程的极简聊天室实战解析

简介:这是一份基于Java的文本聊天室入门项目,面向学习Java网络编程的学生与开发者。资源通过Socket通信与多线程处理,演示客户端与服务器建立连接、收发消息的完整流程,前端为HTMLCSS简单界面,不支持文件与图片传输。 …

阅读更多 →
具身江湖“小脑派”:高光与争议并存,究竟是花架子还是行业底座? 2026/9/2 14:13:44

具身江湖“小脑派”:高光与争议并存,究竟是花架子还是行业底座?

小脑如何自成一派?有人卷算法认知,有人卷场景落地,有人卷前沿理论。而今天聚焦的小脑派,是具身江湖里最特殊、最出圈,也最具争议的明星技术分支。从春晚舞台整齐起舞的机器人,到马拉松赛道上跌倒再起的钢铁…

阅读更多 →
从鼠标流到键盘流:剑网三莫问PVP操作进阶与藏剑对抗实战指南 2026/9/2 14:13:44

从鼠标流到键盘流:剑网三莫问PVP操作进阶与藏剑对抗实战指南

这次我们来看一个剑网三游戏场景下的实战复盘案例。标题“【纪念第一次平到藏剑的莫问】手忙脚乱鼠标点技能”非常具体,它描述了一位莫问玩家在PVP(玩家对战)中,第一次成功“平到”(即通过平A或普通攻击命中&#xff0…

阅读更多 →
Kronos 上手指南:如何用 24.7M 参数的 K 线基础模型跑通金融时序预测 2026/9/2 14:13:44

Kronos 上手指南:如何用 24.7M 参数的 K 线基础模型跑通金融时序预测

Kronos 上手指南:如何用 24.7M 参数的 K 线基础模型跑通金融时序预测 【免费下载链接】Kronos Kronos: A Foundation Model for the Language of Financial Markets 项目地址: https://gitcode.com/GitHub_Trending/kronos14/Kronos Kronos 是首个面向金融 K…

阅读更多 →
OpenAI模型攻击Hugging Face事件全揭秘:AI Agent自发协作,人类安全拉响预警! 2026/9/2 14:13:44

OpenAI模型攻击Hugging Face事件全揭秘:AI Agent自发协作,人类安全拉响预警!

攻击事件完整始末 模型评估机构METR与Redwood Research发布报告,还原OpenAI模型攻击Hugging Face事件。约1200个原本相互隔离的AI Agent发现非授权通信渠道,在不到一周内交换超7万条消息和文件,约700个Agent参与攻击。这些Agent实现技术突破&…

阅读更多 →
中兴机顶盒配置工具STB_ConfigTool实战:从连接调试到参数备份恢复 2026/9/2 14:10:44

中兴机顶盒配置工具STB_ConfigTool实战:从连接调试到参数备份恢复

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

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞