C语言中strcpy函数的理解

来源:互联网 发布:php程序域名授权系统 编辑:程序博客网 时间:2024/04/29 20:37

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、但是会存在漏洞,即会覆盖内存区域的值。