0
点赞
收藏
分享

微信扫一扫

字符串函数的模拟实现

small_Sun 2022-02-19 阅读 70

1.实现strcpy

查阅msdn知道strcpy的函数声明形式如下

char *strcpy( char *strDestination, const char *strSource 

基本用法如下

 

将字符数组arr2(源操作数)中的字符复制到arr1(目的操作数)中。  

void my_strcpy(char* dest, char* ser)
{
     //字符串复制
	while (*dest++ = *ser++)
	{
		;
	}
}
int main()
{
	char arr1[20] = "***********";
	char arr2[] = "student";
	my_strcpy(arr1, arr2);
	printf("%s\n", arr1);
	return 0;
}

while (*dest++ = *ser++)   

·1:后置++的表达式,先使用变量,后对变量进行自增。

2:直接在while循环中进行赋值,因为每一个字符串在定义时,系统会默认加上一个‘\0’(字符串结束标志)而'\0'的ascll码值是0,所以当这个赋值操作进行到‘\0’时,*dest先被赋值为\0,然后while循环判断结果,因其结果为0,所以判断为假跳出循环。而前面的字符串的ascll码值都不为0,那就都判断为真,循环继续。

 当然我们也要防止函数传参时传了一个空指针。所以在复制前可以加上assert函数(断言函数)

如果传参时传过来的参数为NULL,那么系统会报错,编译不能通过。

 

再来比较msdn中定义的标准形式     char *strcpy( char *strDestination, const char *strSource 

在源操作数前有一个const关键字,修饰常变量,被他修饰后,变量中的数据不能通过const修饰过的变量名进行改变(但可以通过指针来改变变量中的数据)这里用来防止字符串赋值时,源操作数和目的操作数写反(会导致结果不能达到预期)

现在 唯一不同的就是函数的返回类型,msdn中strcpy函数返回类型是char *  一个指向字符类型的指针(就是源操作数的首地址)

 printf("%s\n", my_strcpy(arr1, arr2));//函数的链式访问,

一个函数的返回值,作为另一个函数的一个操作数。

所以要进行链式访问,那么该函数必须要有返回值。(函数的返回类型不能为void)

下面就是my_strcpy函数的完整实现:

char* my_strcpy(char* dest,const char* ser)
{
     //字符串复制
	assert(*dest != NULL);//断言
	//用法和if相同,不满足就会报错
	assert(*ser != NULL);
	char* ch = dest;
	while (*dest++ = *ser++)
	{
		;
	}
	return ch;
}
int main()
{
	char arr1[20] = "***********";
	char arr2[] = "student";
	printf("%s\n", my_strcpy(arr1, arr2));//函数的链式访问
	return 0;
}
举报

相关推荐

0 条评论