具有自动截断功能的函数:对比:strcpy、strncpy、sprintf、snprintf在写入的数据大于缓冲区的情况下如何处理
来源:互联网 发布:mac oracle ide 编辑:程序博客网 时间:2024/06/06 15:18
1、strcpy
manpage:什么情况都有可能发生。
实验结果(fedora14):越界写。
结论:程序员必须保证缓冲区足够。
2、strncpy(dst, src, len)
manpage:填充'\0'在dst(前len个)比src多的剩余的空间,不自动在末尾填'\0'。
实验结果:填补剩余的空间,不自动在末尾填'\0'。
3、sprintf
manpage: 如果dest缓冲区小,则越界覆盖。
4、snprintf(dst, len, src)
manpage:具有截断功能;不填充'\0',如果dest缓冲区小于src(snprintf第二个参数)则越界覆盖。(包括vsnprintf)
5、strndup和strndupa
同样具有截断功能,不填充'\0',但前者从堆上申请空间,后者从栈上申请空间。
6、strncat(dst, src,n)
dst的剩余空间一定要大于或等于n+1,原因在于strncat有自动截断功能。
注:实验环境使用GCC编译器和Linux操作系统。
小结:
带n的函数:当给的数据量超出n时会自动截断;如果dest的缓冲区小于限制的最大字符数,那么就如同不带n的函数一样,越界覆盖。
其他具有自动截断功能的函数:
gethostname(char *, ssize_t);
strndup、strndupa、fgets
可overlap的函数:
memmove、bcopy(deprecate)
具有字符串截取功能的函数:
strtok,memccpy
- 具有自动截断功能的函数:对比:strcpy、strncpy、sprintf、snprintf在写入的数据大于缓冲区的情况下如何处理
- strcpy/strncpy/sprintf/_snprintf/snprintf的区别
- C里安全的字符串拷贝 strncpy strcpy sprintf snprintf
- sprintf、snprintf、strcpy、strncpy
- strcpy ,strncpy ,strlcpy和snprintf的使用
- C语言snprintf()函数:将格式化的数据写入字符串—sprintf()
- C语言snprintf()函数:将格式化的数据写入字符串—sprintf()
- C语言snprintf()函数:将格式化的数据写入字符串—sprintf()
- strcpy, strncpy, strcat, strncat, sprintf, snprintf等常用函数
- bcopy(),memccpy(),memmove(),strcpy(),strncpy()的对比
- snprintf()函数与sprintf函数的区别
- sprintf()的snprintf()用法
- sprintf()的snprintf()用法
- sprintf,snprintf的用法
- strcpy和strncpy sprintf和_snprintf的区别
- strcpy函数和strncpy函数的区别
- strncpy,snprintf,strnlen的用法
- 字符串处理函数strcpy和sprintf的效率比较
- Android自助餐之AsyncTask
- iOS学习之——Notification补充
- React Native初认识
- RxJava操作符 debounce 和 distinctUntilChanged
- Android之属性动画
- 具有自动截断功能的函数:对比:strcpy、strncpy、sprintf、snprintf在写入的数据大于缓冲区的情况下如何处理
- javascript 闭包详解+示例(一)
- 图像拼接
- MYSQL添加新用户 MYSQL为用户创建数据库 MYSQL为新用户分配权限
- Android之权重
- hibernat异常:Unable to get the default Bean Validation factory
- 一直没学透的贝叶斯
- css之!important最高优先级
- Matlab保留ROI区域,并将非ROI区域颜色置0