c语言strcpy、strcmp、strcat等常见字符操作函数的介绍

字符串是c语言中一种常见的数据类型,字符串属于常量,不可修改,如果我们想要修改,就要把它放在字符数组中来对其进行修改,而有一些函数可以帮助我们完成一些常用的操作字符串的动作,下面我们就来介绍一些常用字符串操作函数

strlen

strlen

strlen的作用是计算字符串的长度,但不包括最后的\0
所以我们在传参的时候要注意是不是以\0结尾的字符串
我们先来看函数原型

size_t strlen ( const char * str );

形参是用一个字符指针接收字符串的首字符地址

返回类型是个无符号的整型,因为字符串的长度肯定是个非零的数,但这里有一个地方需要注意,看下面:

#include <stdio.h>

int main()

{
   
   

 const char*str1 = "abcdef";

 const char*str2 = "bbb";

 if(strlen(str2)-strlen(str1)>0)//strlen返回的是一个无符号的整型,相减的结果数值上等于-3
                                //但转化为无符号整型是一个无穷大的数 

 {
   
   

 printf("str2>str1\n");

 } 

 else

 {
   
   

 printf("srt1>str2\n");

 }

 return 0; 
}

所以打印结果是str2>str1

strlen的使用情况并不是很复杂,接下来模拟实现strlen:(解释见代码注释)

方法1:

计数器实现

int my_strlen1(const char* str)//计数器实现strlen
{
   
   
	assert(str);//判断str是否为空指针
	int count = 0;
	while (*str++)//str先进行后置++,再进行解引用操作
        //如果*str != \0,进入循环计数
	{
   
   
		count++;//进入循环一次使count自增一次
	}
	return count;//当循环结束时,count此时就是字符串的长度
}

int main()
{
   
   
	char arr[] = "hello world";
	printf("%d\n", my_strlen1(arr));
	return 0;
}

方法2:

递归实现

int my_strlen2(const char* str)
{
   
   
	if (*str)//如果*str != \0,进入递归
		return 1 + my_strlen2(str + 1);//返回1+剩下的字符串长度
	else//当*str = \0,返回0,此时就可计算出字符串长度
		return 0;
}


int main()
{
   
   
	char arr[] = "hello world";
	printf("%d\n", my_strlen2(arr));
	return 0;
}

方法3:

指针减指针实现

int my_strlen3(const char* str)//指针-指针实现strlen
{
   
   
	assert(str);
	char* start = str;//记录首字符地址
	while (*str)//*str != \0时,str指针跳向下一个字符的地址
	{
   
   
		str++;
	}
	return str - start;//循环结束时,str指向最后一个字符(不是\0),
    //str - start即为两者之间元素的个数,也就是字符串长度
}
int main()
{
   
   
	char arr[] = "hello world";
	printf("%d\n", my_strlen3(arr));
	return 0;
}

我们也可以看看vs2019提供的strlen:

size_t __cdecl strlen (
        const char * str
        )
{
   
   
        const char *eos = str;

        while( *eos++ ) ;

        return( eos - str - 1 );
}

求字符串长度时i,字符串不可写成arr[] = {‘a’, ‘b’, ‘c’}的形式,否则计算的是随机值,因为该数组末尾是没有\0的

strcpy

strcpy

我们对数组赋值时不能写成 arr = “abcd”,arr表示的是数组名,这种赋值方式是不合法的,这时就可以使用strcpy

strcpy的作用是将一个字符串的内容拷贝到另一个字符串

strcpy的原型:

char* strcpy</
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

WoLannnnn

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

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

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

打赏作者

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

抵扣说明:

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

余额充值