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

 更新时间:2022年05月05日 14:55:01   作者:<vince>  
C语言中的strcpy函数,是一种C语言的标准库函数,它用于对字符串进行复制。本章带你了解它的使用并模拟实现它

strcpy函数详解如下

1.函数介绍

1.1.函数接口

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

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

1.2.函数分析

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

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

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

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

图解分析:

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

到此这篇关于彻底掌握C语言strcpy函数的用法的文章就介绍到这了,更多相关C语言strcpy函数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 浅谈C语言的字符串分割

    浅谈C语言的字符串分割

    下面小编就为大家带来一篇浅谈C语言的字符串分割。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-05-05
  • c++的glog与spdlog的性能对比测试分析

    c++的glog与spdlog的性能对比测试分析

    这篇文章主要为大家介绍了c++的glog与spdlog的性能对比测试分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • 基于C++实现的线程休眠代码

    基于C++实现的线程休眠代码

    这篇文章主要介绍了基于C++实现的线程休眠代码,包括了Linux平台及基于boost库的两种实现方法,有不错的参考借鉴价值,需要的朋友可以参考下
    2014-10-10
  • C语言中实现KMP算法的实例讲解

    C语言中实现KMP算法的实例讲解

    KMP算法即字符串匹配算法,C语言中KMP可以避免指针回溯从而达到高效,接下来就来总结一下C语言中实现KMP算法的实例讲解
    2016-06-06
  • 如何在C++中实现按位存取

    如何在C++中实现按位存取

    实现紧凑存取,不是按一个字节一个字节地存取,而是按位存取,本文就是介绍了如何在C++中实现按位存取,需要的朋友可以参考下
    2015-07-07
  • 基于MFC实现单个文档的文件读写

    基于MFC实现单个文档的文件读写

    这篇文章主要为大家详细介绍了如何基于MFC实现单个文档的文件读写功能,文中的示例代码讲解详细,对我们学习有一定帮助,感兴趣的可以了解一下
    2022-07-07
  • C语言位段(位域)机制结构体的特殊实现及解析

    C语言位段(位域)机制结构体的特殊实现及解析

    这篇文章主要为大家介绍了C语言位段位域机制结构体的特殊实现讲解有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪
    2022-02-02
  • C++实现的分布式游戏服务端引擎KBEngine详解

    C++实现的分布式游戏服务端引擎KBEngine详解

    这篇文章主要详细介绍了C++实现的分布式游戏服务端引擎KBEngine的概念以及使用方法,非常的实用,有需要的小伙伴可以参考下
    2015-03-03
  • C语言数据结构中二分查找递归非递归实现并分析

    C语言数据结构中二分查找递归非递归实现并分析

    这篇文章主要介绍了C语言数据结构中二分查找递归非递归实现并分析的相关资料,需要的朋友可以参考下
    2017-03-03
  • PyQt5利用Qt Designer实现简单界面交互

    PyQt5利用Qt Designer实现简单界面交互

    本文主要介绍了PyQt5利用Qt Designer实现简单界面交互,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-03-03

最新评论