【C语言】字符串函数

2024-06-01 3822阅读

目录

前言

一、求字符串长度的函数

1.1   ❥ strlen 

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

2.1  ❥ strcpy 

2.1.1 strcpy的模拟实现

2.2 ❥ strcat 

2.2.1 strcat的模拟实现

2.2.2 字符串自己追加自己问题

2.3 ❥ strcmp 

2.3.1 strcmp的模拟实现

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

3.1 ❥ strncpy  

3.2 ❥ strncat 

3.3 ❥ strncmp 

四、字符串查找

4.1 ❥ strstr

4.1.1 strstr的模拟实现

4.2 ❥ strtok

五、错误信息报告

5.1 ❥ strerror

5.2  ❥ perror


前言

本节重点介绍处理字符串的库函数的使用和注意事项。

一、求字符串长度的函数

1.1   ❥ strlen 

函数原型如下:

size_t strlen ( const char * str ); 

strlen函数:求字符串长度的函数

size_t: unsigned int 即无符号整型

注意事项

  1. 字符串是以'
  2. strlen的使用需要包含头文件:#include
  3. '作为结束的标志,strlen返回的是字符串'
  4. 参数指向的字符串必须以'
  5. strcmp的使用需要包含头文件:#include
  6. '结尾'之前出现的字符个数(不包括'
  7. 比较的是字符的ASCII值。

    2.3.1 strcmp的模拟实现

    的ASCII最小。
  8. ')

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

我们看下面代码:

【C语言】字符串函数 第1张

输出">"的原因:因为strlen的返回值是一个size_t类型的,也就是无符号的整形。

可以强制转换成int,这样就会输出""); } else if (ret == 0) { printf("="); } return 0; }

运行结果如下图所示:

【C语言】字符串函数 第2张

说明比较的是该字符的ASCII值。

返回值是int的原因是:

第一个字符串0

注意事项

    3.1 ❥ strncpy  

补充如下图:

【C语言】字符串函数 第3张

#include 
#include 
int main()
{
	char arr1[] = "abcdefg";
	char arr2[] = "hello world";
	strncpy(arr1, arr2, 5);
	printf("%s", arr1);
	return 0;
}
#include 
#include 
#include 
int my_strcmp(const char* str1, const char* str2)
{
	int ret = 0;
	assert(str1 != NULL);
	assert(str2 != NULL);
	while (*str1 == *str2)
	{
		if (*str1 == '\0')
		{
			return 0;
		}
		str1++;
		str2++;
	}
	return *str1 - *str2;
}
int main()
{
	char arr1[]= "abcdef";
	char arr2[] = "abcdg";
	int ret = my_strcmp(arr1, arr2);
	if (ret  
 
 

3.2 ❥ strncat 

char * strncpy ( char * destination, const char * source, size_t num ); 

strncpy函数:字符串拷贝受限制的函数。

拷贝num个字符从源字符串到目标空间。

代码如下:

#include 
#include 
int main()
{
	char arr1[20] = "hello ";
	char arr2[] = "summer";
	strncat(arr1, arr2, 5);
	printf("%s", arr1);
	return 0;
}

运行结果下图所示:

【C语言】字符串函数 第4张

如果源字符串的长度小于num,则拷贝完源字符串之后,在目标的后面追加\0,直到num个。

代码如下图所示:

【C语言】字符串函数 第5张

运行结果如下图所示:

【C语言】字符串函数 第6张

注意'\0'的作用

代码如下:

【C语言】字符串函数 第7张

运行结构如下图所示:

【C语言】字符串函数 第8张

#include 
#include 
int main()
{
	char arr1[20] = "hello ";
	char arr2[] = "hh";
	strncat(arr1, arr2, 5);
	printf("%s", arr1);
	return 0;
}
#include 
#include 
int main()
{
	char arr1[20] = "hello

xxxxxxxx"; char arr2[] = "world"; strncat(arr1, arr2, 5); printf("%s", arr1); return 0; }

3.3 ❥ strncmp 

#include 
#include 
int main()
{
	char arr1[] = "abcdef";
	char arr2[] = "abcq";
	int ret = strncmp(arr1, arr2,4);
	printf("%d\n", ret);
	if (ret > 0)
	{
		printf(">");
	}
	else if (ret 

char * strncat ( char * destination, const char * source, size_t num ); 

strncat函数:长度受限制的字符串追加函数

将source指向的字符串的前num个字符追加到destination指向的字符串末尾,再追加一个'\0'字符。

代码如下:

运行结果如下图所示:

【C语言】字符串函数 第9张

调试结果如下图所示:

【C语言】字符串函数 第10张

注意:arr1后要给定数组的大小,不给定就会由于初始化了6个,追加空间不够而报错。

【C语言】字符串函数 第11张

如果source指向的字符串的长度小于num的时候,只会将字符串中到\0的内容追加到destination指向的字符串末尾。

代码如下所示:

【C语言】字符串函数 第12张

soucre字符串是否给自己追加'\0'?我们来测试一下,代码如下:

【C语言】字符串函数 第13张

因为\0是字符串结束的标志,此处追加5个字符,world在56789的位置,如果追加上一个\0,那么[10]的位置就是\0

从上图可看出,确实source自己给自己追加了 \0 

int strncmp ( const char * str1, const char * str2, size_t num ); 

strncmp函数:比较两个字符串内容是否相等(长度受限制)

比较str1和str2的前num个字符,如果相等就继续往后比较,最多比较num个字母,如果提前发现不一样,就提前结束。大的字符所在的字符串大于另外一个。如果num个字符都相等,就返回0。

【C语言】字符串函数 第14张

代码如下:


    免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

    目录[+]