strcpy, strncpy, strlcpy的区别
来源:互联网 发布:qq群排名优化软件免费 编辑:程序博客网 时间:2024/04/30 08:15
1.strcpy 此函数历史最悠久,很早就出现在标准库里,由于当初的程序员认识不够,该函数的行为会造成缓冲区溢出。下面是溢出的例子:
char name[2];
char *p = "hello world!";
strcpy (name, p);
strcpy没有做检查,只是单纯地把一个字符串拷贝到另外一个线性空间,不会检查有没有足够的空间来保存该字符串(例如"hello world!",就全部拷贝到p,!号后面有个/0,strcpy遇到/0结束拷贝),于是造成溢出。
2.strncpy 函数是strcpy的安全版,它有个缺点就是要手动加/0来结束一个字符串。
strncpy:
如果src的前n个字节不含NULL字符,则结果不会以NULL字符结束。
如果src的长度小于n个字节,则以NULL填充dest直到复制完n个字节。
src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。
返回指向dest的指针。
strncpy 的标准用法为:(手工写上 /0)
strncpy(path, src, sizeof(path) - 1);
path[sizeof(path) - 1] = '/0';
len = strlen(path);
3.strlcpy 函数只有linux中才有提供,Windows 下是没有 strlcpy 的,对应的是strcpy_s函数。strlcpy与strncpy功能相类似,但会帮你加上/0,第3个参数不是拷贝的长度,而是目的缓冲区的大小。strlcpy不属于ANSI C,前面两个函数是ANSI C里面的函数。
- strcpy, strncpy, strlcpy的区别
- strcpy ,strncpy ,strlcpy的用法
- strcpy ,strncpy ,strlcpy的用法
- strcpy ,strncpy ,strlcpy的用法
- strcpy strcpy_s strncpy strlcpy区别与联系
- error C4996 & strcpy ,strncpy ,strlcpy的用法
- strcpy ,strncpy ,strlcpy和snprintf的使用
- strcpy,strncpy,strlcpy,memcpy
- strcpy, strncpy and strlcpy
- strcpy,strncpy,strlcpy,memcpy
- strcpy,strncpy,strlcpy,memcpy
- strcpy strncpy strlcpy
- strcpy strncpy和strlcpy
- strcpy ,strncpy ,strlcpy
- strcpy ,strncpy ,strlcpy
- strcpy strncpy strlcpy
- strcpy,strncpy,strlcpy,memcpy
- Linux C中strcpy , strncpy , strlcpy 的区别
- 转载:开源license总结
- 在Linux上的IDE 开发环境 列表
- 5641
- 开篇文-写写我自己
- 嵌入式GUI FTK设计与实现-目录
- strcpy, strncpy, strlcpy的区别
- 关于注册类和注册id
- vc下debug 版本和release版本的区别
- 给经常修理电脑的朋友16点忠告
- c++ 强制转换问题
- xv
- 如何设置为文本模式启动
- mplayer
- 20100315