面试中常问的strcpy()函数相关【溢出、手写、返回值】

目录

标准库函数中的strcpy()源码

strcpy()的用法

strcpy()的问题

缓冲区溢出问题

内存重叠问题

总结

手写实现strcpy()

strcpy()为什么返回指针?

函数strncpy()


标准库函数中的strcpy()源码

strcpy是一种C语言的标准库函数。strcpy是string copy 字符串复制的缩写。
char *strcpy(char *strDest, const char *strSrc)简单的理解:源字符串strSrc的内容复制给目标字符串strDest
更详细的:strcpy把从strSrc地址开始且含有’\0’结束符的字符串复制到以strDest开始的地址空间,返回值的类型为char*。其源代码如下:

#include <assert.h>
char *strcpy(char *strDest, const char *strSrc){
    assert((strDest!=NULL) && (strSrc !=NULL)); 
    char *address = strDest;      
    while( (*strDest++ = *strSrc++) != '\0' ) ; 
    return address ;     
}

代码分析:
源字符串参数用const修饰,防止源字符串被修改;
assert()是断言宏,作用是如果它的条件返回错误,则终止程序执行。也就是说strcpy传入的参数地址不允许是NULL。
address地址用于记录复制串的首地址。   
while( (*strDest++ = *strSrc++) != '\0' ) ; 是字符串复制过程, 到 '\0' 终止。

strcpy()的用法

用法如下代码所示:

	char a[100]="abcdefg";
	char b[100]="x";
	char c[100]="y";
	strcpy(b,a);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值