C语言-----函数功能实现---strcpy&&strlen

这篇具有很好参考价值的文章主要介绍了C语言-----函数功能实现---strcpy&&strlen。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.函数功能参数介绍

C语言-----函数功能实现---strcpy&&strlen,C语言习题集,c语言,java,前端

该函数的功能就是把一个字符串复制到另外的一个数组,包括'\0';

2.首先我们要明确字符串的复制也是包括最后的\0的;

void mystrcpy(char* dest, char* src)
{
	
	while (*src!='\0')
	{
		*dest = *src;
		dest++;
		src++;
	}
	*dest = *src;
	
}
int main()
{
	char arr1[] = "hello world";
	char arr2[20] = "xxxxxxxxxxxxxx";
	mystrcpy(arr2, arr1);
	printf("%s\n", arr2);
	return 0;
}

跳出while循环之后就会把末尾的\0实现复制;

3.继续优化----------------------------------------------

我们阅读上面的资料就会发现strcpy的返回值就是dest,所以我们利用这个就可以继续优化代码,

让自定义函数返回dest,因为循环的过程中dest发生了变化所以我们定义一个新的指针变量记录dest

的初始位置,并且作为返回值;

char* mystrcpy(char* dest, char* src)
{
	char* ret = dest;
	while (*src != '\0')
	{
		*dest = *src;
		dest++;
		src++;
	}
	*dest = *src;
	return ret;
}
int main()
{
	char arr1[] = "hello world";
	char arr2[20] = "xxxxxxxxxxxxxx";
	
	printf("%s\n", mystrcpy(arr2, arr1));
	return 0;
}

4.代码继续优化

像这样,如果有空指针,我们可以使用assert断言,这样就可以准确的找出程序的出错位置,如果没有断言,我们就无法知道自己错在哪里,但是断言会准确的告诉我们出错的位置,提高代码的可读性,但是记住需要包含assert.h的头文件;

#include<assert.h>
char* mystrcpy(char* dest, char* src)
{
	char* ret = dest;
	assert(dest != NULL);
	assert(src != NULL);
	while (*src != '\0')
	{
		*dest = *src;
		dest++;
		src++;
	}
	*dest = *src;
	return ret;
}
int main()
{
	char arr1[] = "hello world";
	char arr2[20] = "xxxxxxxxxxxxxx";
	char* p = NULL;
	mystrcpy(p, arr1);
	printf("%s\n", arr2);
	return 0;
}

5.继续优化

#include<assert.h>
char* mystrcpy(char* dest, char* src)
{
	char* ret = dest;
	assert(dest != NULL);
	assert(src != NULL);
	while (*dest++ = *src++)//到\0的时候就会结束,因为\0的ascii是0
	{
		;//空语句
	}
	return ret;
}
int main()
{
	char arr1[] = "hello world";
	char arr2[20] = "xxxxxxxxxxxxxx";
	char* p = mystrcpy(arr2, arr1);
	printf("%s\n", arr2);
	return 0;
}

这里面让while循环语句里面的内容变得更加精炼,把其实现的部分放到了判断条件里面;

解引用操作符不会作用于加加,这样指针继续向后移动,当到\0的时候,控制循环条件的赋值语句的结果是\0的ASCII值,也就是0,这样就结束了循环;

6.到这里,函数的功能就已经实现了,但是会发现少了参数里的const,补上就好了,其实const的作用就是让我们无法改变修饰的值;

char* mystrcpy(char* dest, const char* src)
{
	char* ret = dest;
	assert(dest != NULL);
	assert(src != NULL);
	while (*src != '\0')
	{
		*dest = *src;
		dest++;
		src++;
	}
	*dest = *src;
	return ret;
}
int main()
{
	char arr1[] = "hello world";
	char arr2[20] = "xxxxxxxxxxxxxx";
	char* p = NULL;
	mystrcpy(arr2, arr1);
	printf("%s\n", arr2);
	return 0;
}

7.const修饰指针变量

(1)当const放在*左边的时候,指针指向的内容不能改变,指针本身可以改变;

C语言-----函数功能实现---strcpy&&strlen,C语言习题集,c语言,java,前端

(2)当const放在*右边的时候,指针本身不可以改变,但是指向的内容可以改变;

C语言-----函数功能实现---strcpy&&strlen,C语言习题集,c语言,java,前端

(3)当*的左右都有const,无论是指针本身还是指向的内容,都无法改变;

C语言-----函数功能实现---strcpy&&strlen,C语言习题集,c语言,java,前端

8.明白const的作用,再回到函数的功能实现,就会发现const的必要性,如果在过程里面,我们把*src和*dest的位置颠倒了,程序就会报错,因为这样改变了*src,加上const可以让我们的程序变得更加严谨。

9.利用const,assert我们实现strlen的功能

#include<assert.h>
size_t mystrlen(const char* p)
{
	assert(p != NULL);
	char* left = p;
	size_t count = 0;
	while (*p)
	{
		p++;
		count++;
	}
	return count;
}
int main()
{
	char arr[] = "wj djekd kedkkk";
	size_t len = mystrlen(arr);
	printf("%zd\n", len);
	//%u打印无符号数的,和%zd差别不大;
	return 0;
}

资料显示,strlen的返回类型是size_t,这个是位sizeof设计的一个类型,是unsigned int 或者是

unsigned long类型,所以我们把len,count都设计为size_t类型。文章来源地址https://www.toymoban.com/news/detail-830171.html

到了这里,关于C语言-----函数功能实现---strcpy&&strlen的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C语言--模拟实现库函数strcpy

    本章内容我们将通过相关函数来实现库函数中的strcpy。 C语言 strcpy()函数用于对字符串进行复制(拷贝)。需要的头文件为 string.h 。原理如下 其中的strSource为 源字符串 ,strDestination为 目的字符串 ,strcpy的作用就是将 strSource 指向的字符串复制到 strDestination。 我们举个例子 打

    2024年01月19日
    浏览(39)
  • C语言--strcmp函数,strcat函数,strcpy函数详解及实现

    目录 1.strcmp函数 1.1函数介绍 1.2函数使用 1.2.1代码 1.2.2运行结果 1.3模拟实现strcmp 1.3.1实现思路 1.3.2代码  1.3.3运行结果 2.strcat函数 2.1函数介绍 2.2函数使用  2.2.1代码 2.2.2运行结果 2.3模拟实现strcat 2.3.1实现思路 2.3.2代码  2.3.3运行结果 3.strcpy函数 3.1函数介绍 3.2函数使用 3.2.1代

    2024年02月01日
    浏览(74)
  • 【C语言】自定义实现strlen函数的3种方法

    大家好,我是苏貝,本篇博客带大家了解C语言中自定义实现strlen函数的3种方法,如果大家觉得我写的不错的话,可以给我一个赞👍吗,感谢❤️ 函数原型 :size_t strlen( const char string ); //求string的长度 头文件 :#includestring.h 返回值 :返回的是第一个目的数字的首地址,类型为

    2024年02月13日
    浏览(38)
  • 【C语言】字符串函数strcpy&&strcat&&strcmp&&strstr的使⽤和模拟实现

    🔍个人主页 : @啊森要自信的主页 ✏️ 真正相信奇迹的家伙,本身和奇迹一样了不起啊! 欢迎大家关注🔍点赞👍收藏⭐️留言📝希望看完我的文章对你有小小的帮助,如有错误,可以指出,让我们一起探讨学习交流,一起加油鸭。 记上节,我们学了字符串 strlen 的使用和

    2024年02月05日
    浏览(47)
  • 【我爱C语言】详解字符函数isdigit和字符串转换函数(atoi和snprintf实现互相转换字符串)&&三种strlen模拟实现

    🔍个人主页 : @啊森要自信的主页 ✏️ 真正相信奇迹的家伙,本身和奇迹一样了不起啊! 欢迎大家关注🔍点赞👍收藏⭐️留言📝希望看完我的文章对你有小小的帮助,如有错误,可以指出,让我们一起探讨学习交流,一起加油鸭。 本小节我们将学习字符分类函数,字符

    2024年02月04日
    浏览(55)
  • C语言-函数STRCPY

    char *strcpy(char *restrict dst, const char *restrict src); 把src的字符串拷贝到dst restrict表明src和dst不重叠(C99) 返回dst 为了能链起代码来 char dst = (char )malloc(strlen(src) + 1); strcpy(dst, src);

    2024年02月04日
    浏览(51)
  • 【C语言】strcpy()函数

    文章目录 一、strcpy()函数的简介 二、strcpy()函数的具体使用 三、使用strcpy()函数的注意事项  strcpy()函数:是将一个字符串复制到另一块空间地址中 的函数,‘\\0’是停止拷贝的终止条件,同时也会将 \\\'\\0\\\' 也复制到目标空间。下面是库中的strcpy()函数声明: char* strcpy(char* des

    2024年02月03日
    浏览(40)
  • C语言的strcpy()函数

    strcpy()函数的简介 strcpy()函数用于将一个字符串拷贝到另一个内存地址的函数,拷贝停止的条件是遇到\\\'\\0\\\',同时会将\\\'\\0\\\'一同拷贝到目标地址。下面是strcpy()函数的声明: 1. 函数的参数: char* destination---------目标字符串的首地址 const char* source------源地址:被复制的字符串的首

    2024年02月13日
    浏览(41)
  • 【C语言】strlen()函数

    目录 一、strlen()函数的简介 二、strlen()函数的具体使用 三、使用strlen函数的注意事项  四、实现strlen函数功能的三种方式 1.计数器的方式 2.递归的方式 3.指针减指针的方式 总结 一、strlen()函数的简介 strlen函数:计算的是字符串str的长度,从字符的首地址开始遍历,

    2024年02月13日
    浏览(40)
  • C语言 strlen()函数

    一、strlen()函数的简介         strlen函数:计算的是字符串str的长度,从字符的首地址开始遍历,以 \\\'\\0\\\' 为结束标志,然后将计算的长度返回,计算的长度并不包含\\\'\\0\\\'。下面是库中的strlen()函数: size_t  strlen (const char* str); 函数的参数为------const char* str:字符指针

    2024年02月16日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包