目录
  • 1.函数介绍
    • 1.1.函数接口
    • 1.2.函数分析
  • 2.库函数strcpy源代码
    • 2.1.库函数分析
  • 3.模拟实现strcpy函数
    • 3.1.模拟实现
  • 写在后面

    strcpy函数详解如下

    1.函数介绍

    1.1.函数接口

    char * __cdecl strcpy(char * dst, const char * src);

    这里是库函数里面的函数定义接口。该函数作用是将一组字符串复制到另一组字符串中去,就是所谓的 复制字符串函数。

    1.2.函数分析

    1、这里是将源字符串拷贝到目标字符串空间中去。

    2、源字符串必须以 ‘/0’ 结束。

    3、拷贝会将源字符串中的 ‘\0’ 拷贝进去。

    4、目标空间必须足够大,且必须可变。

    图解分析:

    彻底掌握C语言strcpy函数的用法

    2.库函数strcpy源代码

    char * __cdecl strcpy(char* dst, const char* src)
    {
    		char * cp = dst;
     	 	while((*cp++ = *src++) != '\0')
     				;               
     		return( dst )
     }

    2.1.库函数分析

    分析:

    1、 这里 dst 就是指向目标字符空间的指针,所以不能用const 修饰,必须是可变的;src 是源字符串,源字符串可以用const 修饰。

    2、 这里源字符串 src 结尾必须含有 ‘\0’ ,这样循环里的判断条件才能成立。

    3、这里*cp++ = *strc++这种写法更加简便,缩短代码量。

    3.模拟实现strcpy函数

    3.1.模拟实现

    char* my_strcpy(char* str2,const char* str1)
    {
    	char* first = str2;
    	assert(str2 && str1);//这里注意,尽量把assert放在char* 
    	//first的下一行
    	//有的编译器中若将assert放在最前面,可能无法编译,因为C语言规定变量的常见必须放在代码前面
    	while (*str2++ = *str1++)
    	{
     		 ;
    	}
    	return first;
    }
    int main(void)
    {
    	char ch1[] = "abcde";
    	char ch2[] = "XXXXXXXXXXXX";
     	printf("%s\n", my_strcpy(ch2, ch1));//这里是链式访问
    	//在一个函数里面去访问另一个函数的值,就是链式访问
    }

    分析总结:

    1、尽量不要返回局部变量的地址。(因为局部变量在函数内部使用后:在出这个函数后,其局部变量的空间就会被销毁,就不会再指向这个函数之前使用的地址了,所以就无法访问到之前使用的地址,就会出现非法访问内存的错误)。

    2、指针不知道赋什么值的时候,就给NULL。

    3、指针使用完后,就给NULL。

    写在后面

    友友们,相聚的时刻总是短暂的,又到了说再见的时候啦~ 但是字符串这一块经常在面试的时候会出模拟实现某某字符串函数的面试题,因此我们不能只会平时利用头文件直接调用而不去摸清原理哈~ 要做到 摸清、拿捏、吃透 字符串函数。

    以上代码均可运行,所用编译环境为 vs2019 ,运行时注意加上编译头文件#define _CRT_SECURE_NO_WARNINGS 1

    声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。