• 【C语言】strcpy等string函数和memcpy等memory函数的实现,经典方法


    Ⅰ. string类函数

    1.strcpy()

    strcpycpp中是如何定义的?
    在这里插入图片描述
    作用:将source中的字符串内容拷贝到destination中去,但是对source中的字符串不造成影响;

    my_strcpy的实现:

    char* my_strcpy(char* e1, const char* e2)
    {
    	char* tmp = e1;
    	while (*e1++ = *e2++)
    	{
    		;
    	}
    	return tmp;
    }
    

    2.strlen()

    strlen()cpp中如何定义的?
    在这里插入图片描述
    作用:由此可见,strlen是返回一个字符串长度的函数;

    my_strlen的实现:

    int my_strlen(char* arr)
    {
    	int sz = 0;
    	while (*arr++ != '\0')
    	{
    		sz++;
    	}
    	return sz;
    }
    

    3.strcmp()

    strcmpcpp中是如何定义的?
    在这里插入图片描述
    在这里插入图片描述
    作用:比较两个字符串第一个不同字符的ASCII码差值,并返回其差值;

    my_strcmp 的实现:

    int my_strcmp(const char* e1, const char* e2)
    {
    	assert(e1 && e2);
    	while (*e1 == *e2)//如果相等,进入下面操作
    	{
    		if (*e1 == '\0')//如果相等且都为'\0',说明字符串相等
    		{
    			return 0;
    		}
    		e1++;//否则加加
    		e2++;
    	}
    	return *e1 - *e2;//不相等,返回差值
    }
    

    4.strcat()

    strcatcpp中是如何定义的?
    在这里插入图片描述
    作用:连接两个字符串,并返回destination字符串的首地址;

    #include
    char* my_strcat(char* e1, const char* e2)
    {
    	assert(e2);
    	char* tmp = e1;
    	while (*e1 != '\0')
    	{
    		e1++;
    	}
    	while (*e1 = *e2)
    	{
    		e1++;
    		e2++;
    	}
    	return tmp;
    }
    
    

    5.strstr()

    strstr()cpp中是如何定义的?
    在这里插入图片描述
    作用:判断字符串A是否是字符串B的子集,如果是,则返回B中子集的字符串首地址;如果不是,返回空字符串NULL。
    my_strstr的实现:

    char* my_strstr(const char* e1,const char* e2)
    {
    	const char* s1 = e1;
    	const char *s2 = e2;
    	const char* p = e1;
    	while(*p)
    	{
    		s1 = p;
    		s2 = e2;
    		while(*s1!='\0'&&*s2!='\0'&&*s1==*s2)
    		{
    			s1++;
    			s2++;
    		}
    		if(*s2=='\0')
    		{
    			return p;
    		}
    		p++;
    	}
    {
    

    6.strtok()

    strtok 在cpp中是如何定义的?
    在这里插入图片描述
    作用:就是把一个字符串通过指定的字符断开,返回被切割出的字符串首地址,其次如果继续切割,则要调用空字符串和指定字符;
    比如:
    在这里插入图片描述
    这个不要求学会自我实现;

    7.strerror()

    strerror 在cpp中是如何定义的?
    在这里插入图片描述
    作用:通过错误码的代数打印出错误信息。
    比如:
    在这里插入图片描述

    Ⅱ.memory类函数

    1.memcpy()

    memcpy 在cpp中是如何定义的?
    在这里插入图片描述
    作用:把源字符串的内容拷贝到目标字符串中,对源字符串的内容不造成影响;
    my_memcpy 的实现:

    #include
    #include
    void* my_memcpy(void* dest, const void* sour, size_t num)
    {
    	assert(dest && sour);
    	if (dest > sour)//从前往后
    	{
    		while (num--)
    		{
    			*(char*)dest = *(char*)sour;
    			dest = (char*)dest + 1;
    			sour = (char*)sour + 1;
    		}
    	}
    	else//从后往前
    	{
    		while (num--)
    		{
    			*((char*)dest + num) = *((char*)sour + num);
    		}
    	}
    }
    

    2.memmove()

    memmove 在cpp中是如何定义的?
    在这里插入图片描述
    作用:是一般化的memcpy。
    my_memmove 的实现:同memcpy;

    3.memset()

    memset 在cpp中是如何定义的?
    在这里插入图片描述
    作用:对目标内存进行操作,修改为源内容,以字节为单位;

    Ⅲ.Ctype类函数

    在这里插入图片描述

    朋友,你也不想你的博客被白嫖吧?
    在这里插入图片描述

  • 相关阅读:
    redis 哨兵(sentinel)机制
    解决IDEA中java的system.properties乱码问题
    LeetCode Hot-100
    13.keepalived实现高可用
    如何保护您的工业网络?
    修正版 | 面对千万级、亿级流量怎么处理?
    Linux命令之用户管理(详解)
    大二网页制作实习总结
    MATLAB程序设计与应用 3.1 特殊矩阵
    JS-DOM--全局DOM对象document-history-location-navigator-screen-window
  • 原文地址:https://blog.csdn.net/qq_63519366/article/details/126855425