C语言中strcpy函数的理解

strcpy原型

原型声明:char strcpy(char dest, const char *src);
头文件:string.h 和 stdio.h
功能:把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间
说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。
返回指向dest的指针。

strcpy的理解

当dest的空间不足以容纳src的字符串时,内部是怎样的?

假定源字符串(str)的大小为6个字节,完全复制需要7个字节;现在的目的字符串(str1)的大小为5个字节。

经过strcpy函数复制之后,str1与str相同。

一段测试代码:
1 #include <stdio.h>
2 #include <string.h>
3 int main(){
4 char *str = "123456";
5
6 char str1[5];
7 strcpy(str1, str);
8 printf("str1 = %s\n",str1);
9 printf("size(%s) = %lu\n",str1,strlen(str1));
10
11 char *ptr = &str1[4];
12 printf("*ptr = %c\n",*ptr);
13 printf("*(ptr+1) = %c\n",*(ptr+1));
14 printf("*(ptr+2) = %c\n",*(ptr+2));
15 return 0;
16 }

执行结果如下:
str1 = 123456
size(123456) = 6
str1[4] = *ptr = 5
*(ptr+1) = 6
*(ptr+2) =

strcpy总结

1、dest的大小至少为2即可。
2、不需要>=src的大小+1。
3、但是会存在漏洞,即会覆盖内存区域的值。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值