字符函数介绍

1. strlen

strlen函数是用来计算字符串长度的(只能计算字符串,应为该函数内部计算结束条件是遇到'\0')

int main()
{
	char arr[] = "abcdefg";
	printf("%d", strlen(arr));
	return 0;
}

结果:

7

 为什么说strlen函数的计算结束条件是遇到'\0'呢?

int main()
{
	char arr[] = "abc\0defg";
	printf("%d", strlen(arr));
	return 0;
}

 结果:

3

 因为strlen函数就是为字符串服务的,在c语言中任何字符串最后面都会给你补上一个'\0'

2. strcpy(拷贝函数)

strcpy的作用就是将一个字符串复制到一个数组里面(数组的空间一定要够大)

destination是一个数组的访问地址

source是要复制到数组的,字符串的地址

返回值:复制操作完成后,将数组的访问地址返回回去

(这边注意,复制的过程中会将字符串中的'\0'也复制过去)

看代码:

int main()
{
   char arr[] = "xxxxxxxxxx";//10个x
   strcpy(arr, "abc");
   printf("%s", arr);
   return 0;
}

 代码结果:

abc

看图:

 从这里可以看出来,strcpy函数在覆盖的过程中,会连带源字符串的'\0'一起覆盖过去

再看一个代码:

int main()
{
	char arr[] = "xxxxxxxxxx";//10个x
	char arr1[] = "yyyyyyyyy";
	strcpy(arr, arr1);
	printf("%s", arr);
	return 0;
}

看结果:

yyyyyyyyyy

因为strcpy函数的俩个参数的类型是char*类型的,所以只要是char*类型的指针地址都可以传过去 。

既然都是char*的地址,那是不是就可以让我们要覆盖的位置往后走一走

看代码:
 

int main()
{
	char arr[] = "xxxxxxxxxx";//10个x
	strcpy(arr+3, "abc");
	printf("%s", arr);
	return 0;
}

结果:

xxxabc

3. strcmp(比较函数)

strcmp函数的功能是对比俩个字符串是否相等,然后返回相应的值(返还一个整型)

参数部分因我们只是对比,并不需要改变他们的值,都是const char*的类型

看代码:

int main()
{
	char arr[] = "abcdefg";//第四个字符是d
	char arr1[] = "abceefg";//第四个字符是e
	printf("%d", strcmp(arr,arr1));
	return 0;
}

看结果:

-1

 strcmp函数对比的时候,不是所俩个字符串所以的字符都一一对比过去的

4. strcat(追加函数)

strcat是一个对字符串进行追加字符的函数

参数部分一个char* 一个const char*,前者我们需要对其进行追加字符,所以需要修改,后者只是提供源字符串,所以不需要修改是const char*

返回值是目标地址,也就是被追加字符的那个字符串的地址

看代码:
 

int main()
{
	char arr[20] = "abc";//确保数组空间足够大
	printf("%s", strcat(arr, "defg"));
	return 0;
}

结果:

abcdefg

但是我们切记,千万不可以自己追加自己,看代码:
这是我自己模拟的strcat函数,我们可以看到的是如果是自己追加自己的话,那么第二个循环永远进不去,并且该函数的参数就是char* 和const char*类型的,第二个参数是不可修改的

5. strncpy(*拷贝函数)

strncpy和strcpy的区别就是有无长度限制 ,也就是多了一个参数num(无符号整型)

这里主要要注意一下源字符串的'\0'也算一个长度

就是如果num大于source的长度,小于等于destination长度,那么拷贝完sourcee的内容后,后面不够拿'\0'来填充

6. strncmp(*比较函数)

 strncpm和strcmp的区别也是加了长度参数num(无符号整数)

例:

很明显arr2是大于arr1的,但是应为我们限制了比较的字符个数,所以他对比到f就结束了对比,后面他就不管了,直接相等返回0

7. strncat(*追加函数)

strncat和strcat的区别也是有一个长度限制,其他的都一样,都会在追加结束后,在末尾添加一个'\0’\

总结

理论上strncat strncmp strncpy会比strcat strcmp strcpy更安全,使用时还是根据实际情况来选择

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值