字符函数和字符串函数(C语言进阶)(一)

目录

前言

1、函数介绍

1.1 strlen

1.2 strcpy

1.3 strcat


前言

        C语言中对字符和字符串的处理是很频繁的,但是c语言本身是没有字符串类型的,字符串通常放在常量字符串中或着字符数组中。

        字符串常量适用于那些对它不做修改的字符串函数。

1、函数介绍

1.1 strlen

        strlen:计算字符串长度06ae8b8e3dc449c6914b1404f16d0d81.png

        看一个代码:

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

8db3f46475fa4e289cc8aa64ad2f199e.png

        输出值为6,对于strlen函数,它计算的是一个字符串'\0'前的字符个数,不包括'/0'自己,所以对于arr数组来说,其运算的长度就为6。下面我们写一个没有'\0'结尾的字符串,看看strlen求出的长度是多少。

4edcf4c1f30d4af782d5b16cf816b055.png

        可以看到,这次的输出结果就是不确定的,因为内存中'\0'出现的位置我们是不确定的,其求出来的值就是随机值。这样子求长度是没有意义的。所以使用strlen时,我们传过去的字符串必须时以'\0'结尾的。

        strlen的返回值时size_t,是无符号的,看看下面这个例子:

#include <stdio.h>
#include <string.h>
int main()
{
	if (strlen("abc") - strlen("abcdef") > 0)
	{
		printf(">\n");
	}
	else
	{
		printf("<");
	}
	return 0;
}

        它最后输出值是:b18c814e1fb14e73881deeb6f5ce4b92.png

        输出为'>',证明了strlen的返回值是无符号的,这也是一些考试会出现的坑。

1.2 strcpy

        strcpy:字符串拷贝    db32fb6bc81141a4b137f00606c3ece5.png

        将source地址指向的数据拷贝到destination指向的数据空间中去。(包括字符中的'\0')

看例子:

#include <stdio.h>
#include <string.h>
int main()
{
	char name[20] = { 0 };
	strcpy(name, "zhangsan");
	printf("%s", name);
	return 0;
}

69a931ffdf854732b509f80f51b92d56.png

        看到效果,name指针的内容被改为了"zhangsan",如果直接赋值是不允许的。字符串需要放到一个空间中时,就必需要用到strcpy函数。

        深入讨论一下,如果说,被拷贝的内容resource中,在中途遇到'\0',strcpy会怎么处理呢,看一个函数:

8df14a9a917f4cc7875524e7d9504c10.png

        我们发现,'\0'之后的内容没有被拷贝过去。

        strcoy只会将'\0'之前的数据拷贝,所以,以后使用是,必须保证被拷贝的数据中包含'\0'。不然strcoy会一直拷贝下去。

        下面再看一个例子:

#include <stdio.h>
#include <string.h>
int main()
{
	char* p = "abcedf";
	char arr[] = "bit";
	strcpy(p, arr);
	return 0;
}

        这个代码运行起来是会报错的,因为我们是将p指向了常量字符串"abcdef"的地址,常量字符串是在只读内存区建立的,只能读取,不能更改,因此在尝试用strcpy去更改时会出错。

        因此,我们在运用这些函数时,一定要注意细节。

1.3 strcat

        strcat:字符串追加28223e9610af4a03955ca59a5e0277ed.png

        函数功能是将source指向的内容,加到destination后面。

        下面看例子:

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

33068cee803b41e3a231191ac5fe24d4.png

        使用strcat时,我们要注意:1、目标空间要足够大,能够将要追加的内容包含住。2、被追加和追加的字符串(destination,source)中需要有'\0'。3、目标空间必须为可修改空间。

本篇暂时讲到这,后续还有两篇,感谢大家的观看,如果有帮助到你,我很高兴。

  • 58
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

彭逍遥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值