在上一节的内容结束后,有关指针
的内容就告一段落了,指针
是开发中非常重要的一环,大家务必要对其深入理解并且掌握,今天我们将继续往下学习,主要学习字符串操作相关的函数
,分为不限制长度
和限制长度
两种,好了,话不读说,开整!!!
不限制长度
strlen
这个函数可以说是我们最早开始接触到的,并且和字符串
有关的函数之一了,我们在C语言学习(十一)中就对其进行了介绍,其主要功能为:
计算字符串的长度,以\0为字符串结束标志
比如以下两个字符串定义方式,使用strlen
后返回值是否相同呢,代码如下:
#include<stdio.h>
#include<string.h>
int main()
{
char a[] = {'a','b','v'};
char b[] = "abv";
printf("%d %d",strlen(a),strlen(b));
return 0;
}
当然是不同的了,如果你回答错了可要回去自己补课喽,链接直达,在此不阐述了,编译结果如下:
在此处当然是要讲点不一样的了,那么strlen
返回的数值带不带符号呢,如下代码所示,你猜会打印出什么结果呢:
#include<stdio.h>
#include<string.h>
int main()
{
char a[] = "abcdw";
char b[] = "abv";
if (strlen(b) - strlen(a) > 0)
printf("无符号");
else
printf("有符号");
return 0;
}
我们先查看结果:
???????????????????
王德发!!!
我们先查看该函数的说明:
可见返回了一个size_t
类型的数据,这是什么呢,我们在vscode
中找到它并打开,可以发现其是一个无符号整数
:
因此,上述的虽然结果为-2,当将其转为无符号数必然为正数,所以才会出现上述的结果。
strcpy
首先查看该函数的说明:
其作用是:
讲源地址的字符内容拷贝到目的地地址中
例如以下代码:
#include<stdio.h>
#include<string.h>
int main()
{
char sou[] = "abcd";
char des[10] = "0";
strcpy(des,sou);
return 0;
}
我们进行调试,可以看到,再拷贝前,目的地des中的内容为:
步进后可以见讲源地址sou中的内容拷贝到目的地地址des中:
并且这种拷贝将字符串结束标志\0也拷贝过来
了
strcmp
该函数的说明如下:
可见其功能为:
比较俩个字符串
其返回值为如下图
:
如以下代码的打印结果是什么呢:
#include<stdio.h>
#include<string.h>
int main()
{
char a[] = "adc";
char b[] = "aed";
char c[] = "abd";
char e[] = "adc";
int res1 = strcmp(a,b);
int res2 = strcmp(a,c);
int res3 = strcmp(a,e);
printf("%d %d %d\n",res1,res2,res3);
return 0;
}
查看结果:
从结果中,我们看到,该函数是按位进行比较
的,不相等则继续向下比较
,直至比完最后一位为止
。
需要注意的是:
返回值并非固定的,在不同的编译器下返回值不同
如在Linux
下的gcc
编译器的结果如下:
从该值中可以看到其返回的正好是字符之间的ASCII码值之差
strcat
查看其使用说明:
如以下代码:
#include<stdio.h>
#include<string.h>
int main()
{
char des[20] = "#####";
char sou[] = "c_learn";
strcat(des,sou);
printf("%s\n",des);
return 0;
}
编译得到以下结果:
限制长度
上述所讲述的即为几个字符串相关的函数,当然这些函数是不限制长度的,与此相对应的还有限制长度的字符串函数,此处仅以strcpy为例
,其余大家可以自行查看学习:
strncpy
查看该函数说明:
其功能为:
从源地址中拷贝num个字节到目的地地址中
如以下代码:
#include<stdio.h>
#include<string.h>
int main()
{
char des[20] = "#####";
char sou[] = "c_learn";
strncpy(des,sou,5);//将拷贝c_lear拷贝到des中
printf("%s\n",des);
return 0;
}
编译查看结果:
除此以外,我们也看到了:
拷贝是将目的地地址中的内容覆盖掉
了,因此使用时要注意。
上述内容即使今天的全部内容了,感谢大家的观看。
如果方便,辛苦大家点个赞和关注哦!
您的点赞或评论或关注是对我最大的肯定,谢谢大家!!!