彻底掌握C语言strcpy函数的用法
目录
- 1.函数介绍
- 1.1.函数接口
- 1.2.函数分析
- 2.库函数strcpy源代码
- 2.1.库函数分析
- 3.模拟实现strcpy函数
- 3.1.模拟实现
- 写在后面
1.函数介绍
1.1.函数接口
char * __cdecl strcpy(char * dst, const char * src);
【彻底掌握C语言strcpy函数的用法】这里是库函数里面的函数定义接口。该函数作用是将一组字符串复制到另一组字符串中去,就是所谓的 复制字符串函数。
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语言由浅入深了解变量的应用
- 双指针进阶-接雨水-Rust语言描述
- 堆-优先队列进阶(TopK-3D接雨水-C-Js-Rust语言描述)
- 数据结构与算法: 堆 优先队列 JavaScript语言描述
- 2_如何将android虚拟设备的语言设置为简体中文
- 掌握全局代码执行和作用域的提升
- TIOBE|TIOBE 10 月编程语言排行榜(Swift 正过时())
- 编程语言|TIOBE 5 月编程语言排行榜(Python、C++ 竞争白热化,Objective-C 已沦为小众语言)
- 业界资讯|TIOBE 5 月编程语言排行榜(C# 最受开发者欢迎,C++ 将冲击 Top 3)
- 【深度学习】自然语言处理 --- 理解Google最强NLP模型: BERT