关于函数snprintf的缺陷探讨
来源:互联网 发布:永嘉之乱 知乎 编辑:程序博客网 时间:2024/06/07 14:42
int snprintf(char *str, size_t size, const char *format, ...);
最多从源串中拷贝n-1个字符到目标串中,然后再在后面加一个0。所以如果目标串的大小为n的话,将不会溢出。函数返回值: 若成功则返回存入数组的字符数,若编码出错则返回负值。
snprintf 规定了写入str的最大字节数,防止缓冲区溢出。
如果能够正确使用snprintf是不会出问题的,因为它自身有越界检查。可是,在作者所在的公司里,有些代码采用了以下的使用方法,就出问题了:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc,char *argv[])
{
char str1[10];
memset(str1,0x00,sizeof(str1));
snprintf(str1,sizeof(str1),"acbf%aaaabcbbbbcccc");
printf("str1:%s\n",str1);
return 0;
}
输出:str1:acbf0x1.0
这里只是个简单的例子做说明。出现这个问题的条件有两个:一、特殊字符%;二、snprintf没有加 const char *format,这个参数。在上述简单例子中,如果snprintf这样使用:snprintf(str1,sizeof(str1),"%s","acbf%aaaabcbbbbcccc");是不会出现该问题的。
在一大推代码中,如果有snprintf这样使用,容易出现字符串被截断的现象,作者从事的代码中就有这样的问题出现,修改的方法就是用strncpy来替换。
你们遇上过这个情况了吗?
- 关于函数snprintf的缺陷探讨
- snprintf()函数探讨
- 关于snprintf函数
- 探讨AsyncTask的缺陷
- 探讨AsyncTask的缺陷
- snprintf函数的用法
- snprintf函数的使用
- snprintf函数的用法
- snprintf函数的使用
- snprintf函数的使用
- 关于VC++ 6.0函数命名的缺陷
- snprintf函数的用法解析
- snprintf函数的常见功能
- snprintf()函数的返回值
- snprintf函数的用法解析
- snprintf 在GCC VC 上不同的行为及其探讨
- snprintf函数
- snprintf函数
- 一个Kettle异常的解决方式
- 华为机试—鉴定回文数—较少code
- ios7 StatusBar
- V8编程入门
- Flex工程编译慢的优化方案
- 关于函数snprintf的缺陷探讨
- “https://18.0.6.200/svn/xxx”: SSL handshake failed 错误解决
- 关于CXF JSonProvider
- 经典算法题每日演练——第一题 百钱买百鸡
- 使用富文本来控制文字效果
- 安卓截图
- toad常用快捷
- 什么是百度权重如何提高百度权重?
- DedeCMS标签调用详细教程