超详细讲解长度不受限制的字符串函数(保姆级教程!!!)

超详细讲解长度不受限制的字符串函数(保姆级教程!!!)

  • 一、求字符串长度函数
    • strlen
      • strlen函数的使用
      • strlen函数与sizeof的区别
      • strlen函数的模拟实现
  • 二、长度不受限制的字符串函数
    • strcpy函数
      • strcpy函数的使用
      • strcpy函数的模拟实现
    • strcat函数
      • strcat函数的使用
      • strcat函数的模拟实现
    • strcmp函数
      • strcmp函数的使用
      • strcmp函数的模拟实现

一、求字符串长度函数

strlen

在这里插入图片描述
size_t strlen(const char *str) ,即strlen函数是计算字符串 str 的长度,直到空结束字符,但不包括空结束字符。

strlen函数的使用

下面为strlen函数的使用例子。

#include <stdio.h>
int main()
{const char*str1 = "abcdef";const char*str2 = "bbb";if(strlen(str2)-strlen(str1)>0){printf("str2>str1\n");} else{printf("srt1>str2\n");}return 0; }

而上述代码的输出结果,在于strlen函数的特点。

1、字符串以 ‘\0’ 作为结束标志,strlen函数返回的是在字符串中 ‘\0’ 前面出现的字符个数(不包
含 ‘\0’ )。

2、参数指向的字符串必须要以 ‘\0’ 结束。
3、注意函数的返回值为size_t,是无符号的。
4、学会strlen函数的模拟实现。

strlen函数与sizeof的区别

首先,strlen 是函数,sizeof 是运算操作符,二者得到的结果类型为 size_t,即 unsigned int 类型。大部分编译程序在编译的时候就把 sizeof 计算过了,而 strlen 的结果要在运行的时候才能计算出来。
对于以下代码:

char *str1 = "asdfgh";
char str2[] = "asdfgh";
char str3[8] = {'a', 's', 'd'};
char str4[] = "as\0df";

输出结果是:

sizeof(str1) = 4;  strlen(str1) = 6;
sizeof(str2) = 7;  strlen(str2) = 6;
sizeof(str3) = 8;  strlen(str3) = 3;
sizeof(str4) = 6;  strlen(str4) = 2;

那让我们来看下面这一段代码:

#include <stdio.h>
int main()
{char str[] = "hello bit";printf("%d %d\n", sizeof(str), strlen(str));return 0;
}

输出的结果是10与9。
这是因为str字符数组使用"hello bit"初始化,最终也会将’\0’放置到数组中,因此数组中总共有10个元素。
sizeof(str):获取数组的总大小(包括‘\0’),10个元素,每个元素占1个字节,因此总共是10个字节。
strlen(str): 获取字符串中有效字符的个数,不算’\0’,因此总共9个有效字符。
故上述printf会分别打印:10 9

strlen函数的模拟实现

strlen函数的模拟实现有三种不同的方法。
1、用递归实现模拟:

int my_strlen1(const char* str)
{assert(str != NULL);if (*str != '\0')return 1 + my_strlen(str + 1);elsereturn 0;

2、用“指针-指针”的方式进行模拟:

	int my_strlen2(const char* str)
{const char* start = str;assert(str != NULL);while (*str){str++;}return str - start;

3、常规的、暴力算法实现模拟:

int my_strlen(const char* str)
{assert(str != NULL);int count = 0;while (*str != '\0'){count++;str++;}return count;
}

以上三种方法都可以实现strlen函数的模拟。

二、长度不受限制的字符串函数

strcpy函数

在这里插入图片描述
strcpy 函数把 src 所指向的字符串复制到 dest。

需要注意的是如果目标数组 dest 不够大,而源字符串的长度又太长,可能会造成缓冲溢出的情况。dest – 指向用于存储复制内容的目标数组。
src – 要复制的字符串。
该函数返回一个指向最终的目标字符串 dest 的指针。

strcpy函数的使用

先来看一个strcpy函数的使用例子:

#include <stdio.h>
#include <string.h>int main()
{char src[40];char dest[100];memset(dest, '\0', sizeof(dest));strcpy(src, "This is runoob.com");strcpy(dest, src);printf("最终的目标字符串: %s\n", dest);return(0);
}

上面程序的输出结果是: This is runoob.com
strcpy函数具有以下的特点:

1、源字符串必须以 ‘\0’ 结束,并且会将源字符串中的 ‘\0’ 拷贝到目标空间。
2、目标空间必须足够大并且可变,以确保能存放源字符串。

需要注意的是,strcpy函数适合的场景一般是一个对象里有内容,另一个没有内容。

strcpy函数的模拟实现

char* my_strcpy(char* dest, const char* src)
{char* ret = dest;assert(dest && src);while (*dest++ = *src++){;}return ret;

strcat函数

在这里插入图片描述
strcat是把 src 所指向的字符串追加到 dest 所指向的字符串的结尾的函数。
dest – 指向目标数组,该数组包含了一个 C 字符串,且足够容纳追加后的字符串。
src – 指向要追加的字符串,该字符串不会覆盖目标字符串。
该函数返回一个指向最终的目标字符串 dest 的指针。

strcat函数的使用

下面的实例演示了 strcat函数的用法:

#include <stdio.h>
#include <string.h>int main ()
{char src[50], dest[50];strcpy(src,  "This is source");strcpy(dest, "This is destination");strcat(dest, src);printf("最终的目标字符串: |%s|", dest);return(0);
}

执行上述的程序,将产生以下结果:
最终的目标字符串: |This is destinationThis is source|
strcat函数的特点如下:

1、源字符串必须以 ‘\0’ 结束。
2、目标空间必须有足够的大,能容纳下源字符串的内容。
3、目标空间必须可修改。

但对于strcat函数需要注意一个点,那就是使用strcat函数自己给自己进行追加可以吗?

#include <stdio.h>
#include <string.h>int main ()
{char dest[20]="abcdef";strcat(dest, dest+2);printf("%s", dest);return(0);
}

上述函数的输出结果会是什么?
在这里插入图片描述
这时候系统会进行报错,因为程序已经崩溃了,而我们也可以看看监控下的dest数组的状态。
在这里插入图片描述
我们会发现,原本我们只是想让dest数组自己给自己再追加“abcedf”的,但结果dest陷入了无限次给自己增加的死循环中,导致dest数组无法容纳这么多数据而崩溃。
因为strcpy的原理是先找到目标字符串的结束字符\0,然后目标字符串后面的\0会被源字符串的第一个字符覆盖,而后源字符串的字符被逐个追加到目标字符串后面,每追加一个字符,源地址和目标地址就加1,直到源地址上的字符为结束字符\0才会停止。
而在上述情况中使用strcat给自己进行增加,就会出现dest的“\0”标志会被第一个字符“a”给取代,而这时候因为是给自己进行增加,所以增加的数组原本是遇到“\0”就会停止的,但此时“\0”已经不见了被替代了。
在这里插入图片描述

strcat函数的模拟实现

char* my_strcat(char* dest, const char* src)
{assert(dest && src);char* ret = dest;//1. 找目标空间的\0while (*dest){dest++;}//2. 追加while (*dest++ = *src++){;}return ret;
}

strcmp函数

在这里插入图片描述
在这里插入图片描述
strcmp函数是将 str1 所指向的字符串和 str2 所指向的字符串进行比较。
str1 – 要进行比较的第一个字符串。
str2 – 要进行比较的第二个字符串。
该函数返回值如下:

如果返回值小于 0,则表示 str1 小于 str2。
如果返回值大于 0,则表示 str1 大于 str2。
如果返回值等于 0,则表示 str1 等于 str2。

strcmp函数的使用

下面是strcmp函数的使用例子:

#include <stdio.h>
#include <string.h>int main ()
{char str1[15];char str2[15];int ret;strcpy(str1, "abcdef");strcpy(str2, "ABCDEF");ret = strcmp(str1, str2);if(ret < 0){printf("str1 小于 str2");}else if(ret > 0) {printf("str1 大于 str2");}else {printf("str1 等于 str2");}return(0);
}

执行上述程序后的输出结果是:str1 大于 str2。
需要注意的是,字符串大小的比较本质上是根据每个字符的Asall表值大小进行比较得到的,从字符串的第一个字母进行比较,如果相等就依次往后继续比较,直至比较出结果或者遇到\0为止。
在这里插入图片描述

strcmp函数的模拟实现

int my_strcmp(const char* str1, const char* str2)
{assert(str1 && str2);while (*str1 == *str2){if (*str1 == '\0')return 0;str1++;str2++;}/*if (*str1 > *str2)return 1;elsereturn -1;*/return *str1 - *str2;
}

那么,今天的长度不受限制的字符串函数的相关内容我就讲述完啦,因为个人能力有限,文章难免会出现纰漏,届时有错误可以私信发给我以及时更正,谢谢大家!请添加图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/10599.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

自动驾驶IPO热潮里,L4厂商的「攻与守」

“从悬崖上跳下去或许还有一线生机&#xff0c;大不了落个残疾&#xff0c;但不跳等着你的就是一枪毙命。” 作者|斗斗 编辑|皮爷 出品|产业家 最近&#xff0c;自动驾驶的圈子十分热闹。 首先是禾赛科技赴美IPO成功、亿咖通科技成功登陆纳斯达克、纵目科技从新三板转战科创…

你想要的宏基因组-微生物组知识全在这(2023.7)

欢迎点击上方蓝色”宏基因组”关注我们&#xff01; 宏基因组/微生物组是当今世界科研最热门的研究领域之一&#xff0c;为加强宏基因组学技术和成果交流传播&#xff0c;推动全球华人微生物组领域发展&#xff0c;中科院青年科研人员创立“宏基因组”公众号&#xff0c;联合海…

人工智能聊天chatGPT来了,你用了吗

这段时间相信很多人都听说了chatGPT &#xff0c;一时兴起一阵热潮&#xff0c;如果能和chatGPT对话&#xff0c;你想问什么问题呢&#xff1f;我对此也十分好奇&#xff0c;中文版GPT&#xff08;http://chatgptai.iis7.net/&#xff09;的到来&#xff0c;给了我这个机会&…

跟ChatGPT聊聊,然后把聊天记录发表在IF>4的期刊上

文章类型是Editorial&#xff0c;不是常见的Article&#xff0c;所以...我也是标题党&#xff01;哈哈哈&#xff01; 不过ChatGPT确实是很强大的&#xff0c;可以帮助我们做很多学术方面的事情&#xff0c;尤其是GPT-4。没有魔法的小朋友可以试试下面这个国内平替&#xff08…

如何调教ChatGpt 让它听话

以下话说全从 https://prompts.chat/ 谷歌翻译出来的。各位请慢慢品尝 如果老哥们账号被封了&#xff0c;或者没有账号 点我 &#x1f9e0; 很棒的 ChatGPT 提示 欢迎来到“Awesome ChatGPT Prompts”存储库&#xff01;这是一组用于 ChatGPT 模型的提示示例。 ChatGPT模型…

《时代》专访ChatGPT:我还有很多局限,但人类应准备好应对AI

来源&#xff1a;澎湃新闻 【编者按】在《时代》与ChatGPT的对话中&#xff0c;聊天机器人就其工作原理、这种新技术的传播可能带来的风险以及人类应该如何应对潜在问题给出了回答。正如机器人自己的表态&#xff0c;它的反应不应被视为准确事实&#xff0c;也不应被视为其大脑…

【《时代》专访ChatGPT】我还有很多局限,但人类应准备好应对AI

1950年,英国计算机科学家艾伦图灵(Alan Turing)设计了一种被他称为模仿游戏的测试:计算机程序能否让人相信,人类是在和另一个人而不是一台机器对话? 众所周知,图灵测试通常被认为是一种判断计算机是否能够真正“思考”的测试。但图灵实际上是想用它来说明,不管计算机是…

2023 hnust 湖南科技大学 大三下 人工智能导论课程 期中考试复习笔记

前言 ★大概率考✦个人推测考点※补充内容没有完全覆盖“人工智能导论复习2023.pdf”的重点致谢&#xff1a;hwl、lyf、lqx 题型 问答&#xff1a;5*10分综合&#xff1a;15分设计&#xff1a;25分开放题/论述题&#xff1a;10分 第1章 绪论 人工智能的定义 智能 思考与…

关于AGI与ChatGPT,Stuart Russell与朱松纯这么看

来源&#xff1a; 安远AI 导读 2023 年 2 月 13 日 AAAI SafeAI 研讨会上&#xff0c;加州大学伯克利分校教授 Stuart Russell 和北京通用人工智能研究院(BIGAI)朱松纯教授针对 “通用人工智能、人工智能安全” 等问题进行了一场精彩对话&#xff0c;本场对话由加州大学伯克利分…

ChatGPT付费创作系统V2.0.8独立版 +WEB端+ H5端 + 小程序端+新增PC端绘画

ChatGPT付费创作系统V2.0.8提供单独的升级包&#xff0c;升级前先更新至2.0.7版本&#xff0c;再上传升级包替换&#xff0c;同是导入升级包数据库。ChatGPT2.0.8独立版核心功能增加了PC端绘画功能&#xff0c;绘画功能采用其他绘画接口-意间AI&#xff0c;后台一些小细节的优化…

小狐狸ChatGPT付费创作系统1.9.7独立版 + H5端 + 小程序前端增加AI绘画+GPT4接口

小狐狸ChatGPT 1.9.7独立版经播播资源测试了版本比较&#xff0c;本版核心增加了GPT4.0接口功能&#xff0c;小程序端内置了AI绘画功能。体验下来问答速度感觉体验更好。小程序端有更新请对应开发工具更新上传&#xff0c;本版无开源端。播播资源提供的安装教程详见下方&#x…

ChatGPT付费版来啦,好用的AI生成产品还能免费使用吗?AIGC工具箱

​ 最新消息&#xff0c;chatGPT推出了付费版&#xff01;每月&#xff04;42美元&#xff0c;不限流使用&#xff0c;你会付费使用吗&#xff1f; &#x1f9f0;AIGC工具箱 下面推荐几款AI 生成产品&#xff01; 你觉得哪个更好用呢&#xff1f; AI 的出现&#xff0c;颠覆了内…

2023凉陌ChatGPT付费创作系统V4.6+功能强大/有后台

正文: 4.6版本最新的&#xff0c;更新了非常多的东西&#xff0c;有兴趣的到压缩包里面去看。 安装教程: 搭建宝塔 解析域名 上传程序至根目录 配置数据库信息:lib/config.php 导入数据库 PHP选择:7.3 访问网页即可&#xff01; 配置APIKEY&#xff0c;登录网站后台自…

2023最新ChatGPT付费创作系统源码V3.3版+有后台/功能很强大

正文: 最近很火的Ai付费创作系统&#xff0c;最新版3.3版本的&#xff0c;之前的是没有后台的&#xff0c;现在这个版本功能很完善&#xff0c;后台一路了然&#xff0c;所有配置都可以自定义设置&#xff0c;有兴趣的自行去安装体验吧&#xff0c;其它就没什么好介绍的了。 …

ChatGPT付费系统独立版+H5端+小程序开发

ChatGPT付费系统独立版开发需要考虑以下几个方向&#xff1a; 模型训练和优化&#xff1a;需要使用大规模的语料库进行训练&#xff0c;并采用先进的深度学习算法如Transformer、BERT等进行模型优化&#xff0c;以提高ChatGPT的精度和性能。 对话管理和控制&#xff1a…

全网最详细中英文ChatGPT-GPT-4示例文档-人工智能助手从0到1快速入门——官网推荐的48种最佳应用场景(附python/node.js/curl命令源代码,小白也能学)

从0到1快速入门人工智能助手应用场景 Introduce 简介setting 设置Prompt 提示Sample response 回复样本API request 接口请求python接口请求示例node.js接口请求示例curl命令示例json格式示例 其它资料下载 ChatGPT是目前最先进的AI聊天机器人&#xff0c;它能够理解图片和文字…

基于ChatGPT使用报告 (针对嵌入式领域测试及心得)

目录 1、基于驱动的日志解析提问 错误日志分析【100%】 报错日志分析【90%】 错误日志分析【60%】 2、基于安卓设备调试提问 adb调试i2c【效率50%】 adb调试gpio【50%】 3、基于高通代码的提问 基于高通代码含义的解析【效率80%】 基于高通新增TP驱动提问【效率50%】…

chatGPT结合ABAP,用chatGPT写一个SAP的利润表

文章目录 目录 文章目录 序言 利润表概念 用chatGPT写一个利润表 最后想说 序言 体验了很多用人工智能写代码的软件产品&#xff0c;尽管不同的产品各有千秋&#xff0c;但不得不说ChatGPT是这些产品里面综合表现最为优秀的&#xff0c;而且呈“降维打击”之势。以前的自…

使用ChatGPT完成部门和个人季度工作总结

“疫后元年“2023年的第一季度即将过去&#xff0c;相信各位社会人们都过得比往年更加紧张充实吧&#xff1f;转眼又到了完成季度工作总结的时间&#xff0c;完成本职工作之余还要抽出专门的时间完成优秀的工作总结报告&#xff0c;又更让大家本不富裕的休息时间雪上加霜。那么…

述职报告怎么写比较好一点?

最近我注意到许多同事都利用ChatGPT撰写自己的述职报告&#xff0c;这种方式比传统写作更加高效和智能化。因此&#xff0c;我想分享一下关于如何使用ChatGPT进行写作的教程&#xff0c;希望能为那些需要写述职报告的同事提供一些有用的参考和方法。 第一步&#xff1a;打开浏览…