(超详细)字符函数和字符串函数【上】

前言

C 语言中对字符和字符串的处理很是频繁,但是 C 语言本身是没有字符串类型的,字符串通常放在
常量字符串 中或者 字符数组 中。
字符串常量 适用于那些对它不做修改的字符串函数 .

1.求字符串长度函数

strlen函数

我们要求一个字符串函数的长度,strlen通常是我们的第一选择,它被包含在string.h头文件中,我们以下要介绍的字符函数和字符串函数都被包含在这个头文件中,这个函数的声明为:

size_t strlen ( const char * str );

为什么它的返回类型是size_t呢,首先我们要知道size_t是无符号整型类型,因为我们字符的长度不可能是负数,所以我们的返回值选择用无符号整型,那么这个函数内部是如何实现的呢?

我们写一段代码演示:

#include<stdio.h>
#include<string.h>
int main()
{char arr[] = "abcdef";size_t sz = strlen(arr);printf("%zd\n", sz);return 0;
}

我们来看结果:

 

一个字符串的末尾隐藏着一个\0,strlen就是通过一个一个字符记数,找到\0后就停下然后返回那个记数的值,画图演示:

strlen函数从a开始走,只要没遇到\0就一直往后走,走一个字符记数加一,直到遇到\0时,他就停止向后走,函数工作结束并返回那个记数的值。

注意事项:
1.字符串已经 '\0' 作为结束标志, strlen 函数返回的是在字符串中 '\0' 前面出现的字符个数(不包
'\0' )
2. 参数指向的字符串必须要以 '\0' 结束。
3.注意函数的返回值为 size_t ,是无符号的( 易错 )。

总结:strlen函数是一个求字符串长度的函数,内部的工作原理是只要不遇到\0就一直向后走并记数,遇到\0就停下。

2.长度不受限制的字符串函数

strcpy函数

strcpy是用来将一个字符串复制到另一个数组的函数,函数声明为:

char* strcpy(char * destination, const char* sourse)

因为我们要从一个数组中复制字符串到另一个数组中,所以用两个字符指针接收它们的首地址,sourse指向的函数是不需要改变它里面的值的,所以我们用const来修饰它,防止有人改变它的值,增加程序的鲁棒性,在复制完内容后,我们把接收了字符串的那个数组的首地址返回,代码演示:

int main()
{char arr1[] = "abcdef";char arr2[20] = { 0 };strcpy(arr2, arr1);printf("%s\n", arr2);return 0;
}

我们来看一下结果:

 

使用strcpy函数,arr1数组中的字符串很轻松就被复制到了arr2数组中,但是函数也有一些注意事项需要遵守,否则会出现一些无法预知的问题 。

注意事项:

1.源数组字符串必须以\0结尾。

2.目标数组空间必须足够大,能够放得下源字符串的内容。

3.目标空间必须可变。

总结:strcpy是一个复制字符串的函数

stract函数

stract函数的功能是将一个字符串复制到另一个字符串的结尾,使得到字符内容的字符串变长,函数声明为:

char * strcat ( char * destination, const char * source );

它的函数声明与strcpy函数一样,就不过多介绍了,假设我们要进行这样的操作,用代码演示:

int main()
{char arr1[20] = "abcdrf";char arr2[] = "wed";strcat(arr1, arr2);printf("%s\n", arr1);return 0;
}

代码中表示我们要将arr2数组中的内容放到arr1数组的结尾:

 

我相信通过代码的演示大家已经了解了strct函数的使用,这里还有使用此函数的一些注意事项。

注意事项: 
1.源字符串必须以 '\0' 结束。
2.目标空间必须有足够的大,能容纳下源字符串的内容。
3.目标空间必须可修改。

strcmp函数

strcmp是字符串比较函数,使用它可以对两个字符串比较,在排序等情况中可以使用此函数,我们来看看这个函数的声明吧:

int strcmp ( const char * str1, const char * str2 );

在介绍它的函数声明之前,我们先介绍这个函数的工作原理。我们向strcmp函数放入两个数组的首地址 ,它会对两个字符串的字符进行比较,如果相等就往后比,只要有一位分出大小,就会分出大小,假设我们有一个字符串abcdef和另一个abcq使用strcmp函数进行比较前三位都是abc,所以会往下比,当比到第四位时,是d和q进行比较,c的ascall码为99,q的ascall码为112,当有一位字符比出大小时,就会判定abcq比abcdef大,因为abcdef在前,所以函数判定的结果是小于,返回小于0的数字,如果比到最后,两个字符串都一样,则返回0,如果前面那个字符串比后面那个字符串大,则返回一个大于0的数字。

现在我们再看函数声明,也不难理解这个函数的两个参数是指针,用来接收两个数组的首地址,因为只要比较它们的值,不需要改变它们的值,所以用const修饰。

例如我们要比较两个数组中的字符串,我们用代码演示:

int main()
{char arr1[20] = "abcdrf";char arr2[] = "abcq";int ret=strcmp(arr1, arr2);printf("%d\n", ret);return 0;
}

看结果怎么样: 

函数判定abcdef比abcq小,所以返回了一个小于0的数字。

标准规定: 
1.第一个字符串大于第二个字符串,则返回大于 0 的数字
2.第一个字符串等于第二个字符串,则返回 0
3.第一个字符串小于第二个字符串,则返回小于 0 的数字
未完待续。。。。。。

 

 

 

 

 

 

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

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

相关文章

Firefox国际版

Firefox国际版官方网址&#xff1a; Download the Firefox Browser in English (US) and more than 90 other languagesEveryone deserves access to the internet — your language should never be a barrier. That’s why — with the help of dedicated volunteers around…

C语言序列化和反序列化--TPL(一)

TPL TPL说明网站 C语言中高效的序列化 您可以使用tpl快速轻松地存储和重新加载C数据。Tpl是一个用于序列化C数据的库。数据以自然二进制形式存储。该API很小&#xff0c;并试图保持“不碍事”。Tpl可以序列化许多C数据类型&#xff0c;包括结构。Tpl与文件、内存缓冲区和文件…

【数据结构:排序算法】堆排序(图文详解)

&#x1f381;个人主页&#xff1a;我们的五年 &#x1f50d;系列专栏&#xff1a;数据结构课程学习 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 目录 &#x1f369;1.大堆和小堆 &#x1f369;2.向上调整算法建堆和向下调整算法建堆&#xff1a;…

Kafka原生API使用Java代码-生产者-分区策略-默认分区策略轮询分区策略

文章目录 1、代码演示1.1、pom.xml1.2、KafkaProducerPartitioningStrategy.java1.2.1、ProducerConfig.LINGER_MS_CONFIG取 0 值得情况&#xff0c;不轮询1.2.2、ProducerConfig.LINGER_MS_CONFIG取 0 值得情况&#xff0c;轮询1.2.3、ProducerConfig.LINGER_MS_CONFIG取 1000…

B/S架构+java语言+Mysqladr数 据 库ADR药物不良反应监测系统源码 ADR药物不良反应监测系统有哪些作用?

B/S架构&#xff0b;java语言&#xff0b;Mysqladr数 据 库ADR药物不良反应监测系统源码 ADR药物不良反应监测系统有哪些作用&#xff1f; 药物不良反应(ADR)是指在合格药物以正常用量和用法用于预防、诊断、治疗疾病或调节生理功能时所发生的意外的、与防治目的无关的、不利或…

AI Agent智能体概述及原理

AI Agent概述 AI Agent旨在理解、分析和响应人类输入&#xff0c;像人类一样执行任务、做出决策并与环境互动。它们可以是遵循预定义规则的简单系统&#xff0c;也可以是根据经验学习和适应的复杂、自主的实体&#xff1b;可以是基于软件的实体&#xff0c;也可以是物理实体。…

大模型“1元购”?AI公司加速奔向应用端“大航海时代”

自字节跳动发布豆包大模型&#xff0c;互联网大厂纷纷就位&#xff0c;击穿“地板价”的打法从C端向B端拓展。这也成为今年“618”最亮眼的价格战。 5月15日&#xff0c;字节跳动率先宣布豆包大模型已通过火山引擎开放给企业客户&#xff0c;大模型定价降至0.0008元/千Tokens&…

设计模式20——职责链模式

写文章的初心主要是用来帮助自己快速的回忆这个模式该怎么用&#xff0c;主要是下面的UML图可以起到大作用&#xff0c;在你学习过一遍以后可能会遗忘&#xff0c;忘记了不要紧&#xff0c;只要看一眼UML图就能想起来了。同时也请大家多多指教。 职责链模式&#xff08;Chain …

FreeRTOS【8】二值信号量使用

1.开发背景 FreeRTOS 提供了队列可以在线程间快速交换信息&#xff0c;那么还有没有其他交互渠道&#xff1f;答案是有的&#xff0c;相对于队列传递信息&#xff0c;还有更轻量级的线程唤醒操作&#xff0c;那就是信号量&#xff0c;而二值信号量就是最简单的一种。 二值信号量…

C++模拟实现stack和queue

1 stack 1.1概念 stl栈 1.2栈概念 1.3代码 2 queue 2.1概念 stl队列 2.2队列概念 2.3代码

网上打印资料A4纸一般多少钱一张

我们知道&#xff0c;在打印需求上A4纸&#xff08;210mmx297mm&#xff09;是较为常见的打印用纸&#xff0c;同时因为纸张的不同在价格上也存在一定的差异。当然&#xff0c;因在网上打印平台打印资料&#xff0c;能够降低一定的租金个人工成本。 因此&#xff0c;在网上打印…

Swift 中的Getter 和 Setter

目录 前言 1. 什么是Getter和Setter 1.定义 2.作用 2.属性 1.存储属性 2.计算属性 3.属性观察者 3. 使用 Getter 和 Setter 的场景 1.数据转换 2.懒加载 3.数据验证和限制 4.触发相关操作 4.自定义Getter 和 Setter 5. 参考资料 前言 属性是 Swift 编程中的基本…

关于 Spring 是什么

Spring 是什么 我们通常所说的 Spring 指的是 Spring Framework&#xff08;Spring 框架&#xff09;&#xff0c;它是⼀个开源框架&#xff0c;有着活跃⽽庞⼤的社区&#xff0c;这就是它之所以能⻓久不衰的原因。Spring ⽀持⼴泛的应⽤场景&#xff0c;它可以让 Java 企业级的…

九章云极DataCanvas公司DingoDB完成中国信通院权威多模数据库测试

2024年5月16日&#xff0c;九章云极DataCanvas公司自主研发和设计的开源多模向量数据库DingoDB顺利完成中国信息通信研究院&#xff08;以下简称中国信通院&#xff09;多模数据库产品测试。本次测试的成功标志着DingoDB在技术能力、性能表现和产品稳定性方面得到了权威机构的高…

python深入探索斐波那契数列:代码示例与不满足的外围条件

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、斐波那契数列的初步实现 二、外围条件的不满足情况 总结 一、斐波那契数列的初步实现 …

存储型XSS

前言 什么是存储型xss&#xff1a; 提交恶意xss数据&#xff0c;存入数据库中&#xff0c;访问时触发。 存储型xss和反射型xss区别&#xff1a; 存储型存入数据库中&#xff0c;可持续时间长&#xff0c;而反射型持续时间短&#xff0c;仅对本次访问有影响&#xff0c;反射型一…

中华活页文选高中版投稿发表

《中华活页文选&#xff08;高中版&#xff09;》创刊于1960年&#xff0c;是中宣部所属中国出版传媒股份有限公司主管、中华书局主办的国家级基础教育期刊&#xff0c;曾获得“中国期刊方阵双效期刊”、国家新闻出版广电总局推荐的“百种优秀报刊”等荣誉称号。本刊以高中学科…

Day 6:2981. 找出出现至少三次的最长特殊子字符串 I

Leetcode 2981. 找出出现至少三次的最长特殊子字符串 I 给你一个仅由小写英文字母组成的字符串 s 。 如果一个字符串仅由单一字符组成&#xff0c;那么它被称为 特殊 字符串。例如&#xff0c;字符串 “abc” 不是特殊字符串&#xff0c;而字符串 “ddd”、“zz” 和 “f” 是特…

性能猛兽:OrangePi Kunpeng Pro评测!

1.引言 随着物联网和嵌入式系统的不断发展&#xff0c;对于性能强大、资源消耗低的单板计算机的需求也日益增加。在这个快节奏的技术时代&#xff0c;单板计算机已成为各种应用场景中不可或缺的组成部分&#xff0c;从家庭娱乐到工业自动化&#xff0c;再到科学研究&#xff0…

差分曼彻斯特编码详解

这是一种双向码&#xff0c;和曼彻斯特编码不同的是&#xff0c;这种码元中间的电平转换边只作为定时信号&#xff0c;不表示数据。数据的表示在于每一位开始处是否有电平转换&#xff1a;有电平转换则表示0&#xff0c;无则表示1。然后这就出现一个问题&#xff0c;很多小伙伴…