C语言进阶第五篇【常用字符串库函数】(上)

简介: C语言进阶第五篇【常用字符串库函数】(上)

1.  求字符串长度库函数strlen


❤️size_t strlen ( const char * str )


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

⭐️参数指向的字符串必须要以 '\0' 结束。

⭐️注意函数的返回值为size_t,是无符号的


更详细的了解我们在《strlen库函数》这篇博客里有更多的解释,这里的模拟实现就不在过多赘述,直接上代码使用:


1.1 strlen库函数的一般使用

1.1.1 strlen用来求字符串长度


cbef437d3e8341c0b1d8bfaaae5600ab.png


我们通过调试发现,对于字符串的存储,默认是有\0的;我们在用strlen计算长度时,不包括\0;只计算\0前面的字符个函数;所以最终结果就是4!


1.1.2  利用strlen的返回值特性比较大小


我们已经知道strlen的返回值是size_t,是无符号的;所以我们和有符号数比较大小时,就需要先把有符号数转换成无符号数之后;在比较大小:


3c1552791b64460cac0809c79705f5a3.png


比如这个例题:如果我们不了解strlen返回的是无符号数,直接比较大小,结果就是6>-1,打印>;但实际上结果确实< !我们需要把有符号数-1转换成无符号数;然后在比较大小:


06d767720c2e471abbba17dd725e4d36.png


所以最终结果是:<


1.2 strlen库函数的模拟实现

1.2.1 计数器法

a7adec6761504260ac0863add7730b8b.png


1.2.2 函数递归法


62d6fefe27e14992b9d97de1f6901d04.png


1.2.3 指针-指针法



15b472f0e9d946c28ee28475af694c5a.png



2. 拷贝字符串库函数strcpy

❤️char* strcpy(char * destination, const char * source )

⭐️源字符串必须以 '\0' 结束。

⭐️会将源字符串中的 '\0' 拷贝到目标空间。

⭐️目标空间必须足够大,以确保能存放源字符串。

⭐️目标空间必须可变。

更详细的了解我们在《strcpy库函数》这篇博客里有更多的解释,这里的模拟实现就不在过多赘述,直接上代码使用:


2.1 strcpy和strncpy库函数的一般使用

这里我们就暂且明白一点:


1、strcpy是长度不受限制的字符串函数,语法是:strcpy(数组1,数组2),拷贝的时候会把\0也拷贝过去!


2、strncpy是长度受限制的字符串函数,语法是:strncpy(数组1,数组2,n),能用做自己拷贝自己。拷贝的时候不会把\0拷贝过去!


2.1.1 strcpy库函数的使用


8bdbff81569a4e22a3b9a2021b42c275.png

在拷贝的时候要注意最重要的两点:

1.要拷贝的必须包括\0,把\0也要拷贝过去;

2.原来的字符串必须足够大,这样才能把所需字符串拷贝过去;


要是原来里面没有数据,当然会直接拷贝过去;要是原来有数据,会进行覆盖。这里只是拷贝,并不是追加!


2.1.2 strncpy库函数的使用

第一种情况:拷贝的长度 < 字符串本身的长度


f43dbbf23e00460a9c3ce91ee74fcfd0.png



第二种情况:拷贝的长度 > 字符串本身的长度

4d38cc8e3f17411381787492268eef5f.png



当然,我们也可以用strncpy来自己拷贝自己,但是没有什么实际意义!我们只需要明确一点strncpy并不会把\0拷贝过去;但是当拷贝的长度>字符串本身的长度时,它会利用\0进行填充凑个数,强行凑够你要拷贝的字符元素个数!


2.2 strcpy库函数的模拟实现

方法1:


29ae8a32e3ff4f6f9a728ef522601a5f.png

方法2:

d80d2990634345f4b29e37a42f8057e8.png


方法3:

3a7c1babeb784ddbb2d3630b9b5a7850.png


3. 追加字符串库函数strcat

❤️char * strcat ( char * destination, const char * source )


⭐️源字符串必须以 '\0' 结束。

⭐️目标空间必须有足够的大,能容纳下源字符串的内容。

⭐️目标空间必须可修改。


3.1 strcat和strncat库函数的一般使用

这里我们就暂且明白一点:


1、strcat是长度不受限制的字符串追加函数,语法是:strcat(数组1,数组2)。会把\0也传过去!


2、strncat是长度受限制的字符串追加函数,语法是:strncat(数组1,数组2,n),能用做自己追加自己的串。也会把\0也传过去!


3.1.1 strcat库函数的使用

追加时的注意点:

1.数组arr1和数组arr2都要有\0;追加是从arr1的\0开始追加的,用arr2的首地址来覆盖掉arr1的\0,同时把arr2的\0也会追加过来;

2.arr1数组的大小要足够大;

e360fae43d58414fa341dfb7bdf96327.png



从这里我们也能看出为什么strcat不能自己追加自己?比如:hello\0自己拷贝自己;hello我们找\0替换成h,下次又到\0又要用h来替换;造成了死循环!


3.1.2 strncat库函数的使用

1、用来追加任意长度的字符串


第一种情况:追加的长度 < 字符串本身的长度


a2d546f2d4954ba0b35f1afb4443e257.png


第二种情况:追加的长度 > 字符串本身的长度

40be6fef794e4dabb651dbb020509997.png



2、用来自己追加自己


6d22bf144b0a47639e600fecfcaab8ae.png


1、相对于strcat库函数,strncat库函数更加的安全;strncat也拥有strcat的功能,而且比strcat更加的强大;可以自己追加自己的串!


2、如果字符串为hello:它的长度是5,如果我们拷贝3个长度,就是默认在拷贝3个字符以后默认加上\0;如果我们拷贝的长度>5,它拷贝完5个以后也会默认加上\0,终止拷贝!


3、strncpy和strncat的区别:


(1)strncpy拷贝的时候不会拷贝\0过去,但是strncat追加的时候会默认在后面补充\0;


(2)strncpy拷贝的长度>字符串本身长度时,多出来的元素个数会默认补充\0来填充凑数;但是strncat追加时不会强制填充,字符串长度追加完成后,直接补充\0,结束追加!


3.2 strcat库函数的模拟实现


方法1:

bbd83b3ef7a446cf86c50c32b36b7fc9.png


先找到第一个字符串的\0,找到以后就从\0开始追加;把第二个字符串的内容拷贝过来,包括\0 !


方法2:

3e8d64d3eafd48beaf5d03a8cafad626.png


我们发现对strcat函数的返回值也是一个char*指针,和strcpy库函数是一样的;而我们设计的是没有返回值;所以我们可以根据前面strcpy函数的模拟,也定义一个指针记住起始位置。最后返回这个指针就可以啦!

73379b9efb2e43988c51e2df09b36d51.png

相关文章
|
10天前
|
C语言 C++
C语言 之 内存函数
C语言 之 内存函数
24 3
|
1天前
|
存储 缓存 C语言
【c语言】简单的算术操作符、输入输出函数
本文介绍了C语言中的算术操作符、赋值操作符、单目操作符以及输入输出函数 `printf` 和 `scanf` 的基本用法。算术操作符包括加、减、乘、除和求余,其中除法和求余运算有特殊规则。赋值操作符用于给变量赋值,并支持复合赋值。单目操作符包括自增自减、正负号和强制类型转换。输入输出函数 `printf` 和 `scanf` 用于格式化输入和输出,支持多种占位符和格式控制。通过示例代码详细解释了这些操作符和函数的使用方法。
17 10
|
4天前
|
存储 编译器 C语言
C语言函数的定义与函数的声明的区别
C语言中,函数的定义包含函数的实现,即具体执行的代码块;而函数的声明仅描述函数的名称、返回类型和参数列表,用于告知编译器函数的存在,但不包含实现细节。声明通常放在头文件中,定义则在源文件中。
ly~
|
10天前
|
数据可视化 BI API
除了 OpenGL,还有哪些常用的图形库可以在 C 语言中使用?
除了OpenGL,C语言中还有多个常用的图形库:SDL,适合初学者,用于2D游戏和多媒体应用;Allegro,高性能,支持2D/3D图形,广泛应用于游戏开发;Cairo,矢量图形库,支持高质量图形输出,适用于数据可视化;SFML,提供简单接口,用于2D/3D游戏及多媒体应用;GTK+,开源窗口工具包,用于创建图形用户界面。这些库各有特色,适用于不同的开发需求。
ly~
22 4
|
11天前
|
C语言
c语言回顾-函数递归(上)
c语言回顾-函数递归(上)
27 2
|
12天前
|
Java 编译器 C语言
【一步一步了解Java系列】:Java中的方法对标C语言中的函数
【一步一步了解Java系列】:Java中的方法对标C语言中的函数
16 3
|
16天前
|
存储 程序员 编译器
C语言——动态内存管理与内存操作函数
C语言——动态内存管理与内存操作函数
|
16天前
|
C语言
C语言字符(串)函数
C语言字符(串)函数
|
16天前
|
C语言
C语言函数返回值详解
本文详细解析了C语言中函数返回值的概念与应用。从函数的基本定义入手,深入探讨了不同类型返回值的作用及意义,并提供了实用的编程示例,帮助读者更好地理解和使用函数返回值。通过本文,你将掌握如何有效利用返回值优化代码结构与功能实现。
|
10天前
|
C语言
C语言函数
C语言函数
10 0